From 66bda842405b431c50d781db036b6a51128a99b5 Mon Sep 17 00:00:00 2001 From: cc9cii Date: Fri, 23 Jul 2021 15:30:33 +1000 Subject: [PATCH] Convert RefNum index map to use find(). (copied the changes from commits 68e16b6cee0f533027e1d8f1293b8a5582ac5a68 and 0de223c637d0820a97417d84796c1bfeb1836fb8) NOTE: it is unclear how this change affects commit 61a4a0807b4ed2398b8169b477132b12a1a3a106 --- apps/opencs/model/world/data.hpp | 2 +- apps/opencs/model/world/refcollection.cpp | 22 ++++++++-------------- apps/opencs/model/world/refcollection.hpp | 2 +- 3 files changed, 10 insertions(+), 16 deletions(-) diff --git a/apps/opencs/model/world/data.hpp b/apps/opencs/model/world/data.hpp index 5e2054b712..f7a51b289f 100644 --- a/apps/opencs/model/world/data.hpp +++ b/apps/opencs/model/world/data.hpp @@ -118,7 +118,7 @@ namespace CSMWorld const ESM::Dialogue *mDialogue; // last loaded dialogue bool mBase; bool mProject; - std::map > mRefLoadCache; + std::map > mRefLoadCache; int mReaderIndex; bool mFsStrict; diff --git a/apps/opencs/model/world/refcollection.cpp b/apps/opencs/model/world/refcollection.cpp index f5210ca3e4..a26bf1d2f4 100644 --- a/apps/opencs/model/world/refcollection.cpp +++ b/apps/opencs/model/world/refcollection.cpp @@ -8,7 +8,7 @@ #include "record.hpp" void CSMWorld::RefCollection::load (ESM::ESMReader& reader, int cellIndex, bool base, - std::map& cache, CSMDoc::Messages& messages) + std::map& cache, CSMDoc::Messages& messages) { Record cell = mCells.getRecord (cellIndex); @@ -60,16 +60,12 @@ void CSMWorld::RefCollection::load (ESM::ESMReader& reader, int cellIndex, bool else ref.mCell = cell2.mId; - // ignore content file number - std::map::iterator iter = cache.begin(); - unsigned int thisIndex = ref.mRefNum.mIndex & 0x00ffffff; - if (ref.mRefNum.mContentFile != -1 && !base) ref.mRefNum.mContentFile = ref.mRefNum.mIndex >> 24; + unsigned int refNum = (ref.mRefNum.mIndex & 0x00ffffff) | + (ref.mRefNum.hasContentFile() ? ref.mRefNum.mContentFile : 0xff) << 24; - for (; iter != cache.end(); ++iter) - { - if (thisIndex == iter->first.mIndex) - break; - } + std::map::iterator iter = cache.find(refNum); + + if (ref.mRefNum.mContentFile != -1 && !base) ref.mRefNum.mContentFile = ref.mRefNum.mIndex >> 24; if (isDeleted) { @@ -104,15 +100,13 @@ void CSMWorld::RefCollection::load (ESM::ESMReader& reader, int cellIndex, bool // new reference ref.mId = getNewId(); + cache.emplace(refNum, ref.mId); + std::unique_ptr > record(new Record); record->mState = base ? RecordBase::State_BaseOnly : RecordBase::State_ModifiedOnly; - const ESM::RefNum refNum = ref.mRefNum; - std::string refId = ref.mId; (base ? record->mBase : record->mModified) = std::move(ref); appendRecord(std::move(record)); - - cache.emplace(refNum, std::move(refId)); } else { diff --git a/apps/opencs/model/world/refcollection.hpp b/apps/opencs/model/world/refcollection.hpp index d031398d3f..42bb363570 100644 --- a/apps/opencs/model/world/refcollection.hpp +++ b/apps/opencs/model/world/refcollection.hpp @@ -27,7 +27,7 @@ namespace CSMWorld {} void load (ESM::ESMReader& reader, int cellIndex, bool base, - std::map& cache, CSMDoc::Messages& messages); + std::map& cache, CSMDoc::Messages& messages); ///< Load a sequence of references. std::string getNewId();