From: eap Date: Wed, 22 Mar 2017 13:48:29 +0000 (+0300) Subject: IPAL54049: Operations on multiple study objects are very long X-Git-Tag: V8_3_0b1^2 X-Git-Url: http://git.salome-platform.org/gitweb/?a=commitdiff_plain;h=7283e1e47770c2464b3adf9462fabd675aa0e541;p=modules%2Fkernel.git IPAL54049: Operations on multiple study objects are very long --- 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()); } //============================================================================