From 7283e1e47770c2464b3adf9462fabd675aa0e541 Mon Sep 17 00:00:00 2001 From: eap Date: Wed, 22 Mar 2017 16:48:29 +0300 Subject: [PATCH] IPAL54049: Operations on multiple study objects are very long --- src/DF/DF_Label.cxx | 17 ++++++++++++++--- src/SALOMEDSImpl/SALOMEDSImpl_SComponent.cxx | 5 +---- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/src/DF/DF_Label.cxx b/src/DF/DF_Label.cxx index e6971f5df..32e95feed 100644 --- a/src/DF/DF_Label.cxx +++ b/src/DF/DF_Label.cxx @@ -326,10 +326,21 @@ DF_Label DF_Label::FindChild(int theTag, bool isCreate) if(_node->_lastChild->_tag < theTag) aPrevious = _node->_lastChild; } - if(!aPrevious) { - aLabel = _node->_firstChild; + if ( !aPrevious && _node->_firstChild ) + { + // IPAL54049: Operations on multiple study objects are very long + // Use _node->_firstChild->_previous to store the last found child + if ( _node->_firstChild->_previous && + _node->_firstChild->_previous->_tag <= theTag ) + aLabel = _node->_firstChild->_previous; + else + aLabel = _node->_firstChild; + while(aLabel) { - if(aLabel->_tag == theTag) return DF_Label(aLabel); + if(aLabel->_tag == theTag) { + _node->_firstChild->_previous = aLabel; + return DF_Label(aLabel); + } if(aLabel->_tag > theTag) { aNext = aLabel; break; diff --git a/src/SALOMEDSImpl/SALOMEDSImpl_SComponent.cxx b/src/SALOMEDSImpl/SALOMEDSImpl_SComponent.cxx index caae86ecf..ad6e4bdad 100644 --- a/src/SALOMEDSImpl/SALOMEDSImpl_SComponent.cxx +++ b/src/SALOMEDSImpl/SALOMEDSImpl_SComponent.cxx @@ -110,10 +110,7 @@ bool SALOMEDSImpl_SComponent::ComponentIOR(std::string& IOR) bool SALOMEDSImpl_SComponent::IsA(const DF_Label& theLabel) { // scomponent must contain comment and belong to the 2th depth label - if ( theLabel.IsAttribute(SALOMEDSImpl_AttributeComment::GetID()) && theLabel.Depth() == 2) { - return true; - } - return false; + return theLabel.Depth() == 2 && theLabel.IsAttribute(SALOMEDSImpl_AttributeComment::GetID()); } //============================================================================ -- 2.39.2