-// Copyright (C) 2007-2012 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
// License as published by the Free Software Foundation; either
-// version 2.1 of the License.
+// version 2.1 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
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
{