Skip load cell ref when there is no need

Primarily to avoid temporary allocations by ESMReader::getHString.
This commit is contained in:
elsid 2022-04-08 17:08:18 +02:00
parent f4923204bf
commit bbfdb347bd
No known key found for this signature in database
GPG key ID: B845CB9FEE18AB40
9 changed files with 219 additions and 103 deletions

View file

@ -435,7 +435,7 @@ namespace MWRender
cMRef.mRefNum.mIndex = 0;
bool deleted = false;
bool moved = false;
while(cell->getNextRef(esm[index], ref, deleted, cMRef, moved))
while (ESM::Cell::getNextRef(esm[index], ref, deleted, cMRef, moved, ESM::Cell::GetNextRefMode::LoadOnlyNotMoved))
{
if (moved)
continue;

View file

@ -568,7 +568,7 @@ namespace MWWorld
cMRef.mRefNum.mIndex = 0;
bool deleted = false;
bool moved = false;
while(mCell->getNextRef(esm[index], ref, deleted, cMRef, moved))
while (ESM::Cell::getNextRef(esm[index], ref, deleted, cMRef, moved, ESM::Cell::GetNextRefMode::LoadOnlyNotMoved))
{
if (deleted || moved)
continue;
@ -628,7 +628,7 @@ namespace MWWorld
cMRef.mRefNum.mIndex = 0;
bool deleted = false;
bool moved = false;
while(mCell->getNextRef(esm[index], ref, deleted, cMRef, moved))
while (ESM::Cell::getNextRef(esm[index], ref, deleted, cMRef, moved, ESM::Cell::GetNextRefMode::LoadOnlyNotMoved))
{
if (moved)
continue;

View file

@ -448,7 +448,7 @@ namespace MWWorld
//
// Get regular moved reference data. Adapted from CellStore::loadRefs. Maybe we can optimize the following
// implementation when the oher implementation works as well.
while (cell->getNextRef(esm, ref, deleted, cMRef, moved))
while (ESM::Cell::getNextRef(esm, ref, deleted, cMRef, moved, ESM::Cell::GetNextRefMode::LoadOnlyMoved))
{
if (!moved)
continue;