-// Copyright (C) 2007-2014 CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2021 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
std::vector<DF_Attribute*> va = GetAttributes();
_node->_attributes.clear();
- for(int i = 0, len = va.size(); i<len; i++) {
+ for(size_t i = 0, len = va.size(); i<len; i++) {
va[i]->BeforeForget();
delete va[i];
}
sorted.push_back(p->first);
sort(sorted.begin(), sorted.end());
- int len = sorted.size();
- for(int i = 0; i<len; i++)
+ size_t len = sorted.size();
+ for(size_t i = 0; i<len; i++)
attributes.push_back(_node->_attributes[sorted[i]]);
return attributes;
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
{
for(AI p = _attributes.begin(); p!=_attributes.end(); p++)
va.push_back(p->second);
- for(int i = 0, len = va.size(); i<len; i++)
+ for(size_t i = 0, len = va.size(); i<len; i++)
delete va[i];
_attributes.clear();
for(AI p = _attributes.begin(); p!=_attributes.end(); p++)
va.push_back(p->second);
- for(int i = 0, len = va.size(); i<len; i++)
+ for(size_t i = 0, len = va.size(); i<len; i++)
delete va[i];
_attributes.clear();