From 55c511206be2b6f61af1735322f9421c8e225de8 Mon Sep 17 00:00:00 2001 From: Rye Mutt <rye@bred.dog> Date: Mon, 22 Jul 2019 03:29:14 -0400 Subject: [PATCH] Replace a few boost::unordered with absl::flat_hash --- indra/newview/alavatarcolormgr.cpp | 4 ++-- indra/newview/alavatarcolormgr.h | 4 ++-- indra/newview/llmaterialmgr.h | 17 ++++++++--------- indra/newview/llviewerobjectlist.cpp | 22 +++++++++++++++++++--- indra/newview/llviewerobjectlist.h | 7 ++++--- 5 files changed, 35 insertions(+), 19 deletions(-) diff --git a/indra/newview/alavatarcolormgr.cpp b/indra/newview/alavatarcolormgr.cpp index 0e85e13679..ba6be8984c 100644 --- a/indra/newview/alavatarcolormgr.cpp +++ b/indra/newview/alavatarcolormgr.cpp @@ -52,7 +52,7 @@ void ALAvatarColorMgr::addOrUpdateCustomColor(const LLUUID& id, EAvatarColors co void ALAvatarColorMgr::clearCustomColor(const LLUUID& id) { - const uuid_color_umap_t::const_iterator it = mCustomColors.find(id); + auto it = mCustomColors.find(id); if (it != mCustomColors.cend()) { mCustomColors.erase(it); @@ -61,7 +61,7 @@ void ALAvatarColorMgr::clearCustomColor(const LLUUID& id) const LLColor4& ALAvatarColorMgr::getColor(const LLUUID& id) { - uuid_color_umap_t::const_iterator user_col_it = mCustomColors.find(id); + auto user_col_it = mCustomColors.find(id); if (user_col_it != mCustomColors.cend()) { const EAvatarColors color_val = user_col_it->second; diff --git a/indra/newview/alavatarcolormgr.h b/indra/newview/alavatarcolormgr.h index 4abc392050..ae9ffd4d79 100644 --- a/indra/newview/alavatarcolormgr.h +++ b/indra/newview/alavatarcolormgr.h @@ -21,7 +21,7 @@ #include "llsingleton.h" -#include <boost/unordered_map.hpp> +#include <absl/container/flat_hash_map.h> class LLColor4; class LLUUID; @@ -45,6 +45,6 @@ public: const LLColor4& getColor(const LLUUID& id); private: - typedef boost::unordered_map<LLUUID, EAvatarColors> uuid_color_umap_t; + typedef absl::flat_hash_map<LLUUID, EAvatarColors> uuid_color_umap_t; uuid_color_umap_t mCustomColors; }; diff --git a/indra/newview/llmaterialmgr.h b/indra/newview/llmaterialmgr.h index a9f0cf3dd5..669695dd1e 100644 --- a/indra/newview/llmaterialmgr.h +++ b/indra/newview/llmaterialmgr.h @@ -33,6 +33,7 @@ #include "httprequest.h" #include "httpheaders.h" #include "httpoptions.h" +#include "absl/hash/hash.h" class LLViewerRegion; @@ -91,17 +92,15 @@ private: U32 te; LLMaterialID materialID; + template <typename H> + friend H AbslHashValue(H h, const TEMaterialPair& m) { + return H::combine(std::move(h), m.materialID, m.te); + } + bool operator==(const TEMaterialPair& b) const { return (materialID == b.materialID) && (te == b.te); } + bool operator<(const TEMaterialPair& b) const { return (te < b.te) ? TRUE : (materialID < b.materialID);} }; - friend inline bool operator<( - const LLMaterialMgr::TEMaterialPair& lhs, - const LLMaterialMgr::TEMaterialPair& rhs) - { - return (lhs.te < rhs.te) ? TRUE : - (lhs.materialID < rhs.materialID); - } - struct TEMaterialPairHasher { enum { bucket_size = 8 }; @@ -116,7 +115,7 @@ private: typedef std::map<LLMaterialID, get_callback_t*> get_callback_map_t; - typedef boost::unordered_map<TEMaterialPair, get_callback_te_t*, TEMaterialPairHasher> get_callback_te_map_t; + typedef boost::unordered_map<TEMaterialPair, get_callback_te_t*, absl::Hash<TEMaterialPair> > get_callback_te_map_t; typedef std::set<LLUUID> getall_queue_t; typedef std::map<LLUUID, F64> getall_pending_map_t; typedef std::map<LLUUID, getall_callback_t*> getall_callback_map_t; diff --git a/indra/newview/llviewerobjectlist.cpp b/indra/newview/llviewerobjectlist.cpp index d345aa3902..5a778bbaed 100644 --- a/indra/newview/llviewerobjectlist.cpp +++ b/indra/newview/llviewerobjectlist.cpp @@ -2021,7 +2021,12 @@ LLViewerObject *LLViewerObjectList::createObjectViewer(const LLPCode pcode, LLVi return nullptr; } - mUUIDObjectMap[fullid] = objectp; + const auto& iter_pair = mUUIDObjectMap.try_emplace(fullid, objectp); + if (!iter_pair.second && iter_pair.first != mUUIDObjectMap.end()) + { + iter_pair.first->second = objectp; + //LL_WARNS("ObjectUpdate") << "Object already exists in object map " << iter_pair.first->first << LL_ENDL; + } mObjects.push_back(objectp); @@ -2045,7 +2050,13 @@ LLViewerObject *LLViewerObjectList::createObjectFromCache(const LLPCode pcode, L } objectp->mLocalID = local_id; - mUUIDObjectMap[uuid] = objectp; + const auto& iter_pair = mUUIDObjectMap.try_emplace(uuid, objectp); + if (!iter_pair.second && iter_pair.first != mUUIDObjectMap.end()) + { + iter_pair.first->second = objectp; + //LL_WARNS("ObjectUpdate") << "Object already exists in object map " << iter_pair.first->first << LL_ENDL; + } + setUUIDAndLocal(uuid, local_id, regionp->getHost().getAddress(), @@ -2085,7 +2096,12 @@ LLViewerObject *LLViewerObjectList::createObject(const LLPCode pcode, LLViewerRe regionp->addToCreatedList(local_id); } - mUUIDObjectMap[fullid] = objectp; + const auto& iter_pair = mUUIDObjectMap.try_emplace(fullid, objectp); + if (!iter_pair.second && iter_pair.first != mUUIDObjectMap.end()) + { + iter_pair.first->second = objectp; + //LL_WARNS("ObjectUpdate") << "Object already exists in object map " << iter_pair.first->first << LL_ENDL; + } setUUIDAndLocal(fullid, local_id, gMessageSystem->getSenderIP(), diff --git a/indra/newview/llviewerobjectlist.h b/indra/newview/llviewerobjectlist.h index 22b7da78be..646f441b91 100644 --- a/indra/newview/llviewerobjectlist.h +++ b/indra/newview/llviewerobjectlist.h @@ -28,6 +28,7 @@ #define LL_LLVIEWEROBJECTLIST_H #include <boost/unordered_map.hpp> +#include <absl/container/flat_hash_map.h> // common includes #include "lltrace.h" @@ -205,7 +206,7 @@ protected: uuid_set_t mDeadObjects; - boost::unordered_map<LLUUID, LLPointer<LLViewerObject> > mUUIDObjectMap; + absl::flat_hash_map<LLUUID, LLPointer<LLViewerObject> > mUUIDObjectMap; //set of objects that need to update their cost uuid_set_t mStaleObjectCost; @@ -263,8 +264,8 @@ extern LLViewerObjectList gObjectList; */ inline LLViewerObject *LLViewerObjectList::findObject(const LLUUID &id) { - boost::unordered_map<LLUUID, LLPointer<LLViewerObject> >::const_iterator iter = mUUIDObjectMap.find(id); - if(iter != mUUIDObjectMap.end()) + auto iter = mUUIDObjectMap.find(id); + if(iter != mUUIDObjectMap.cend()) { return iter->second; } -- GitLab