diff --git a/indra/newview/alavatarcolormgr.cpp b/indra/newview/alavatarcolormgr.cpp index 0e85e1367994651c1ae4c347cf7499fad554965b..ba6be8984c1853061cbee1c9307d2a5ea23027dc 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 4abc392050cd19e348c2dc5468e4191aa90299c0..ae9ffd4d79c564dc97427e07921ceb81819db9d4 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 a9f0cf3dd577ac7f101165acceaad06d87069bdd..669695dd1e018b898ccaf74a137e49c4278c6988 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 d345aa3902f34addde7698fd16a51c9666e8ae17..5a778bbaed9d4f9d1286449a6e0ada907cddff67 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 22b7da78be2f01cae0792326b0ad4ce7ef985355..646f441b910db78e4b0bad5827d7f5693507bf6b 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; }