TDF_Tool::Label(toRoot.Data(),labelTags,aTargetLabel,create);
}
+static int MyCounter = 0;
+
+int TDF_Tool::Counter()
+{
+ return MyCounter;
+}
//=======================================================================
//function : Entry
(const TDF_Label& aLabel,
TCollection_AsciiString& anEntry)
{
- anEntry.Clear();
+ MyCounter++;
+ /*anEntry.Clear();
if (!aLabel.IsNull()) {
TColStd_ListOfInteger Tags;
TDF_Tool::TagList(aLabel, Tags);
Tags.RemoveFirst();
}
}
+ }*/
+ if (!aLabel.IsNull()) {
+ int aStrLen = 1; // initial "0" of a root label
+ TDF_Label aLab = aLabel;
+ for (; !aLab.IsRoot(); aLab = aLab.Father())
+ {
+ for (int aTag = aLab.Tag(); aTag > 9; aTag /= 10)
+ ++aStrLen;
+ aStrLen += 2; // one digit and separator
+ }
+ if (aStrLen == 1)
+ {
+ // an exceptional case for the root label, it ends with separator
+ static const TCollection_AsciiString THE_ROOT_ENTRY = TCollection_AsciiString('0') + TDF_TagSeparator;
+ anEntry = THE_ROOT_ENTRY;
+ }
+ else
+ {
+ anEntry = TCollection_AsciiString(aStrLen, TDF_TagSeparator);
+ Standard_Character* aPtr = const_cast<Standard_Character*>(anEntry.ToCString() + aStrLen - 1);
+ for (aLab = aLabel; !aLab.IsRoot(); aLab = aLab.Father())
+ {
+ int aTag = aLab.Tag();
+ for (; aTag > 9; --aPtr, aTag /= 10)
+ *aPtr = Standard_Character(aTag % 10) + '0';
+ *aPtr = Standard_Character(aTag) + '0';
+ aPtr -= 2;
+ }
+ *aPtr = '0';
+ }
}
+ else
+ anEntry.Clear();
}
-
//=======================================================================
//function : TagList
//purpose : Returns the entry of a label as a list of integers.