From c6e431d86201f1054b2faa6dfd7327e5abc699da Mon Sep 17 00:00:00 2001 From: Capostrophic Date: Mon, 28 Oct 2019 19:28:14 +0300 Subject: [PATCH] Avoid copying strings in SearchVisitor and readReferenceCollection --- apps/openmw/mwworld/cellref.cpp | 5 +++++ apps/openmw/mwworld/cellref.hpp | 3 +++ apps/openmw/mwworld/cellstore.cpp | 4 ++-- 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/apps/openmw/mwworld/cellref.cpp b/apps/openmw/mwworld/cellref.cpp index fb9fd592a..188a80ae1 100644 --- a/apps/openmw/mwworld/cellref.cpp +++ b/apps/openmw/mwworld/cellref.cpp @@ -25,6 +25,11 @@ namespace MWWorld return mCellRef.mRefID; } + const std::string* CellRef::getRefIdPtr() const + { + return &mCellRef.mRefID; + } + bool CellRef::getTeleport() const { return mCellRef.mTeleport; diff --git a/apps/openmw/mwworld/cellref.hpp b/apps/openmw/mwworld/cellref.hpp index 04e807ce5..f9f6dbdda 100644 --- a/apps/openmw/mwworld/cellref.hpp +++ b/apps/openmw/mwworld/cellref.hpp @@ -34,6 +34,9 @@ namespace MWWorld // Id of object being referenced std::string getRefId() const; + // Pointer to ID of the object being referenced + const std::string* getRefIdPtr() const; + // For doors - true if this door teleports to somewhere else, false // if it should open through animation. bool getTeleport() const; diff --git a/apps/openmw/mwworld/cellstore.cpp b/apps/openmw/mwworld/cellstore.cpp index 3d9c24009..607551f7d 100644 --- a/apps/openmw/mwworld/cellstore.cpp +++ b/apps/openmw/mwworld/cellstore.cpp @@ -137,7 +137,7 @@ namespace { for (typename MWWorld::CellRefList::List::iterator iter (collection.mList.begin()); iter!=collection.mList.end(); ++iter) - if (iter->mRef.getRefNum()==state.mRef.mRefNum && iter->mRef.getRefId() == state.mRef.mRefID) + if (iter->mRef.getRefNum()==state.mRef.mRefNum && *iter->mRef.getRefIdPtr() == state.mRef.mRefID) { // overwrite existing reference iter->load (state); @@ -390,7 +390,7 @@ namespace MWWorld const std::string *mIdToFind; bool operator()(const PtrType& ptr) { - if (ptr.getCellRef().getRefId() == *mIdToFind) + if (*ptr.getCellRef().getRefIdPtr() == *mIdToFind) { mFound = ptr; return false;