From 75d4afb12ab252d5dc31dc9a1397137d29810409 Mon Sep 17 00:00:00 2001
From: Rye Mutt <rye@alchemyviewer.org>
Date: Fri, 23 Oct 2020 02:44:38 -0400
Subject: [PATCH] This is faster.

---
 indra/newview/llviewerobject.cpp | 16 +++++++---------
 indra/newview/llviewerobject.h   |  2 +-
 2 files changed, 8 insertions(+), 10 deletions(-)

diff --git a/indra/newview/llviewerobject.cpp b/indra/newview/llviewerobject.cpp
index 491f7bd1b35..a9eee47e050 100644
--- a/indra/newview/llviewerobject.cpp
+++ b/indra/newview/llviewerobject.cpp
@@ -348,8 +348,7 @@ LLViewerObject::~LLViewerObject()
 	}
 
 	// Delete memory associated with extra parameters.
-	std::map<U16, ExtraParameter*>::iterator iter;
-	for (iter = mExtraParameterList.begin(); iter != mExtraParameterList.end(); ++iter)
+	for (auto iter = mExtraParameterList.begin(), end_it = mExtraParameterList.end(); iter != end_it; ++iter)
 	{
 		if(iter->second != NULL)
 		{
@@ -1544,8 +1543,7 @@ U32 LLViewerObject::processUpdateMessage(LLMessageSystem *mesgsys,
 				unpackParticleSource(block_num, owner_id);
 
 				// Mark all extra parameters not used
-				std::map<U16, ExtraParameter*>::iterator iter;
-				for (iter = mExtraParameterList.begin(); iter != mExtraParameterList.end(); ++iter)
+				for (auto iter = mExtraParameterList.begin(), end_it = mExtraParameterList.end(); iter != end_it; ++iter)
 				{
 					iter->second->in_use = FALSE;
 				}
@@ -1574,7 +1572,7 @@ U32 LLViewerObject::processUpdateMessage(LLMessageSystem *mesgsys,
 					delete[] buffer;
 				}
 
-				for (iter = mExtraParameterList.begin(); iter != mExtraParameterList.end(); ++iter)
+				for (auto iter = mExtraParameterList.begin(), end_it = mExtraParameterList.end(); iter != end_it; ++iter)
 				{
 					if (!iter->second->in_use)
 					{
@@ -1943,7 +1941,7 @@ U32 LLViewerObject::processUpdateMessage(LLMessageSystem *mesgsys,
 				
 				// Mark all extra parameters not used
 				std::map<U16, ExtraParameter*>::iterator iter;
-				for (iter = mExtraParameterList.begin(); iter != mExtraParameterList.end(); ++iter)
+				for (auto iter = mExtraParameterList.begin(), end_it = mExtraParameterList.end(); iter != end_it; ++iter)
 				{
 					iter->second->in_use = FALSE;
 				}
@@ -1963,7 +1961,7 @@ U32 LLViewerObject::processUpdateMessage(LLMessageSystem *mesgsys,
 					unpackParameterEntry(param_type, &dp2);
 				}
 
-				for (iter = mExtraParameterList.begin(); iter != mExtraParameterList.end(); ++iter)
+				for (auto iter = mExtraParameterList.begin(), end_it = mExtraParameterList.end(); iter != end_it; ++iter)
 				{
 					if (!iter->second->in_use)
 					{
@@ -6073,7 +6071,7 @@ LLViewerObject::ExtraParameter* LLViewerObject::createNewParameterEntry(U16 para
 		ExtraParameter* new_entry = new ExtraParameter;
 		new_entry->data = new_block;
 		new_entry->in_use = false; // not in use yet
-		mExtraParameterList[param_type] = new_entry;
+		mExtraParameterList.insert_or_assign(param_type, new_entry);
 		return new_entry;
 	}
 	return NULL;
@@ -6081,7 +6079,7 @@ LLViewerObject::ExtraParameter* LLViewerObject::createNewParameterEntry(U16 para
 
 LLViewerObject::ExtraParameter* LLViewerObject::getExtraParameterEntry(U16 param_type) const
 {
-	std::map<U16, ExtraParameter*>::const_iterator itor = mExtraParameterList.find(param_type);
+	auto itor = mExtraParameterList.find(param_type);
 	if (itor != mExtraParameterList.end())
 	{
 		return itor->second;
diff --git a/indra/newview/llviewerobject.h b/indra/newview/llviewerobject.h
index d5b91708c2b..f224851e6bd 100644
--- a/indra/newview/llviewerobject.h
+++ b/indra/newview/llviewerobject.h
@@ -123,7 +123,7 @@ class LLViewerObject
 		BOOL in_use;
 		LLNetworkData *data;
 	};
-	std::map<U16, ExtraParameter*> mExtraParameterList;
+	absl::flat_hash_map<U16, ExtraParameter*> mExtraParameterList;
 
 public:
 	typedef std::list<LLPointer<LLViewerObject> > child_list_t;
-- 
GitLab