let FileReader::Read return an opaque buffer instead of std::vector.

This can later allow returning a pointer to a static buffer from a cache without creating copies.
This commit is contained in:
Christoph Oelckers 2023-12-10 09:07:26 +01:00
commit fc84579319
12 changed files with 248 additions and 85 deletions

View file

@ -209,7 +209,7 @@ bool MapLoader::LoadGLVertexes(FileReader &lump)
auto gllen=lump.GetLength();
if (gllen < 4)
return false;
auto gldata = glbuf.data();
auto gldata = glbuf.bytes();
if (*(int *)gldata == gNd5)
{
@ -294,7 +294,7 @@ bool MapLoader::LoadGLSegs(FileReader &lump)
segs.Alloc(numsegs);
memset(&segs[0],0,sizeof(seg_t)*numsegs);
glseg_t * ml = (glseg_t*)data.data();
auto ml = (const glseg_t*)data.data();
for(i = 0; i < numsegs; i++)
{
// check for gl-vertices
@ -324,21 +324,21 @@ bool MapLoader::LoadGLSegs(FileReader &lump)
ldef = &Level->lines[lineidx];
segs[i].linedef = ldef;
ml->side=LittleShort(ml->side);
if (ml->side > 1)
auto side=LittleShort(ml->side);
if (side > 1)
return false;
segs[i].sidedef = ldef->sidedef[ml->side];
if (ldef->sidedef[ml->side] != nullptr)
segs[i].sidedef = ldef->sidedef[side];
if (ldef->sidedef[side] != nullptr)
{
segs[i].frontsector = ldef->sidedef[ml->side]->sector;
segs[i].frontsector = ldef->sidedef[side]->sector;
}
else
{
segs[i].frontsector = nullptr;
}
if (ldef->flags & ML_TWOSIDED && ldef->sidedef[ml->side^1] != nullptr)
if (ldef->flags & ML_TWOSIDED && ldef->sidedef[side^1] != nullptr)
{
segs[i].backsector = ldef->sidedef[ml->side^1]->sector;
segs[i].backsector = ldef->sidedef[side^1]->sector;
}
else
{
@ -365,7 +365,7 @@ bool MapLoader::LoadGLSegs(FileReader &lump)
segs.Alloc(numsegs);
memset(&segs[0],0,sizeof(seg_t)*numsegs);
glseg3_t * ml = (glseg3_t*)(data.data() + (format5? 0:4));
const glseg3_t * ml = (const glseg3_t*)(data.bytes() + (format5? 0:4));
for(i = 0; i < numsegs; i++)
{ // check for gl-vertices
const unsigned v1idx = checkGLVertex3(LittleLong(ml->v1));
@ -395,21 +395,21 @@ bool MapLoader::LoadGLSegs(FileReader &lump)
segs[i].linedef = ldef;
ml->side=LittleShort(ml->side);
if (ml->side > 1)
auto side=LittleShort(ml->side);
if (side > 1)
return false;
segs[i].sidedef = ldef->sidedef[ml->side];
if (ldef->sidedef[ml->side] != nullptr)
segs[i].sidedef = ldef->sidedef[side];
if (ldef->sidedef[side] != nullptr)
{
segs[i].frontsector = ldef->sidedef[ml->side]->sector;
segs[i].frontsector = ldef->sidedef[side]->sector;
}
else
{
segs[i].frontsector = nullptr;
}
if (ldef->flags & ML_TWOSIDED && ldef->sidedef[ml->side^1] != nullptr)
if (ldef->flags & ML_TWOSIDED && ldef->sidedef[side^1] != nullptr)
{
segs[i].backsector = ldef->sidedef[ml->side^1]->sector;
segs[i].backsector = ldef->sidedef[side^1]->sector;
}
else
{
@ -456,7 +456,7 @@ bool MapLoader::LoadGLSubsectors(FileReader &lump)
if (!format5 && memcmp(datab.data(), "gNd3", 4))
{
mapsubsector_t * data = (mapsubsector_t*) datab.data();
auto data = (const mapsubsector_t*) datab.data();
numsubsectors /= sizeof(mapsubsector_t);
Level->subsectors.Alloc(numsubsectors);
auto &subsectors = Level->subsectors;
@ -478,7 +478,7 @@ bool MapLoader::LoadGLSubsectors(FileReader &lump)
}
else
{
gl3_mapsubsector_t * data = (gl3_mapsubsector_t*) (datab.data()+(format5? 0:4));
auto data = (const gl3_mapsubsector_t*) (datab.bytes()+(format5? 0:4));
numsubsectors /= sizeof(gl3_mapsubsector_t);
Level->subsectors.Alloc(numsubsectors);
auto &subsectors = Level->subsectors;