-// Copyright (C) 2007-2014 CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2016 CEA/DEN, EDF R&D, OPEN CASCADE
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
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;
return FindChild(tag, true);
}
+//Returns a tag of the last child
+int DF_Label::LastChildTag() const
+{
+ return _node->_lastChild ? _node->_lastChild->_tag : 0;
+}
+
//Returns a string entry of this Label
std::string DF_Label::Entry() const
{