(#566) Performance: Use set to detect if an object already has been inserted in UiTreeOrdering

This commit is contained in:
Magne Sjaastad 2015-10-14 10:07:49 +02:00
parent 1253247481
commit bcc5d636f8

View File

@ -119,11 +119,31 @@ void PdmUiObjectHandle::addDefaultUiTreeChildren(PdmUiTreeOrdering* uiTreeOrderi
std::vector<PdmObjectHandle*> children;
fields[fIdx]->childObjects(&children);
std::set<PdmObjectHandle*> objectsAddedByApplication;
for (int i = 0; i < uiTreeOrdering->childCount(); i++)
{
if (uiTreeOrdering->child(i)->isRepresentingObject())
{
objectsAddedByApplication.insert(uiTreeOrdering->child(i)->object());
}
}
for (size_t cIdx = 0; cIdx < children.size(); cIdx++)
{
if (children[cIdx] && !uiTreeOrdering->containsObject(children[cIdx]))
if (children[cIdx])
{
uiTreeOrdering->add(children[cIdx]);
bool isAlreadyAdded = false;
std::set<PdmObjectHandle*>::iterator it = objectsAddedByApplication.find(children[cIdx]);
if (it != objectsAddedByApplication.end())
{
isAlreadyAdded = true;
break;
}
if (!isAlreadyAdded)
{
uiTreeOrdering->add(children[cIdx]);
}
}
}
}