From 76128c4357bc36acd54575153516c6d337fe4263 Mon Sep 17 00:00:00 2001
From: Graham Linden <graham@lindenlab.com>
Date: Mon, 5 Aug 2019 12:04:29 -0700
Subject: SL-10566 Use vector for some high-traffic, low-item count containers
 instead of list.

Provide method of storing joint indices sep from weight data for faster runtime processing.
---
 indra/llxml/llxmltree.cpp | 16 +++++++++-------
 indra/llxml/llxmltree.h   |  8 ++++----
 2 files changed, 13 insertions(+), 11 deletions(-)

(limited to 'indra/llxml')

diff --git a/indra/llxml/llxmltree.cpp b/indra/llxml/llxmltree.cpp
index ca98953f92..ed9c07e1db 100644
--- a/indra/llxml/llxmltree.cpp
+++ b/indra/llxml/llxmltree.cpp
@@ -111,9 +111,11 @@ LLXmlTreeNode::~LLXmlTreeNode()
 	attribute_map_t::iterator iter;
 	for (iter=mAttributes.begin(); iter != mAttributes.end(); iter++)
 		delete iter->second;
-	child_list_t::iterator child_iter;
-	for (child_iter=mChildList.begin(); child_iter != mChildList.end(); child_iter++)
-		delete *child_iter;
+        for(LLXmlTreeNode* node : mChildren)
+        {
+            delete node;
+        }
+        mChildren.clear();
 }
  
 void LLXmlTreeNode::dump( const std::string& prefix )
@@ -149,15 +151,15 @@ void LLXmlTreeNode::addAttribute(const std::string& name, const std::string& val
 
 LLXmlTreeNode*	LLXmlTreeNode::getFirstChild()
 {
-	mChildListIter = mChildList.begin();
+	mChildrenIter = mChildren.begin();
 	return getNextChild();
 }
 LLXmlTreeNode*	LLXmlTreeNode::getNextChild()
 {
-	if (mChildListIter == mChildList.end())
+	if (mChildrenIter == mChildren.end())
 		return 0;
 	else
-		return *mChildListIter++;
+		return *mChildrenIter++;
 }
 
 LLXmlTreeNode* LLXmlTreeNode::getChildByName(const std::string& name)
@@ -184,7 +186,7 @@ void LLXmlTreeNode::appendContents(const std::string& str)
 void LLXmlTreeNode::addChild(LLXmlTreeNode* child)
 {
 	llassert( child );
-	mChildList.push_back( child );
+	mChildren.push_back( child );
 
 	// Add a name mapping to this node
 	LLStdStringHandle tableptr = mTree->mNodeNames.insert(child->mName);
diff --git a/indra/llxml/llxmltree.h b/indra/llxml/llxmltree.h
index a82fee0416..3e425c3870 100644
--- a/indra/llxml/llxmltree.h
+++ b/indra/llxml/llxmltree.h
@@ -151,7 +151,7 @@ public:
 	LLXmlTreeNode*	getParent()							{ return mParent; }
 	LLXmlTreeNode*	getFirstChild();
 	LLXmlTreeNode*	getNextChild();
-	S32				getChildCount()						{ return (S32)mChildList.size(); }
+	S32				getChildCount()						{ return (S32)mChildren.size(); }
 	LLXmlTreeNode*  getChildByName( const std::string& name );	// returns first child with name, NULL if none
 	LLXmlTreeNode*  getNextNamedChild();				// returns next child with name, NULL if none
 
@@ -177,9 +177,9 @@ private:
 	std::string							mName;
 	std::string							mContents;
 	
-	typedef std::list<class LLXmlTreeNode *> child_list_t;
-	child_list_t						mChildList;
-	child_list_t::iterator				mChildListIter;
+	typedef std::vector<class LLXmlTreeNode *> children_t;
+	children_t                          mChildren;
+	children_t::iterator				mChildrenIter;
 	
 	typedef std::multimap<LLStdStringHandle, LLXmlTreeNode *> child_map_t;
 	child_map_t							mChildMap;		// for fast name lookups
-- 
cgit v1.2.3