mirror of
https://github.com/Open-Cascade-SAS/OCCT.git
synced 2026-05-22 12:48:37 +08:00
Update empty method guards to new style with regex (see PR). Used clang-format 18.1.8. New actions to validate code formatting is added. Update .clang-format with disabling of include sorting. It is temporary changes, then include will be sorted. Apply formatting for /src and /tools folder. The files with .hxx,.cxx,.lxx,.h,.pxx,.hpp,*.cpp extensions.
191 lines
5.5 KiB
C++
191 lines
5.5 KiB
C++
// Created by: DAUTRY Philippe
|
|
// Copyright (c) 1997-1999 Matra Datavision
|
|
// Copyright (c) 1999-2014 OPEN CASCADE SAS
|
|
//
|
|
// This file is part of Open CASCADE Technology software library.
|
|
//
|
|
// This library is free software; you can redistribute it and/or modify it under
|
|
// the terms of the GNU Lesser General Public License version 2.1 as published
|
|
// by the Free Software Foundation, with special exception defined in the file
|
|
// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
|
|
// distribution for complete text of the license and disclaimer of any warranty.
|
|
//
|
|
// Alternatively, this file may be used under the terms of Open CASCADE
|
|
// commercial license or contractual agreement.
|
|
|
|
#include <TDF_LabelNode.hxx>
|
|
|
|
#include <TDF_Data.hxx>
|
|
#include <TDF_Label.hxx>
|
|
|
|
//=======================================================================
|
|
// function : TDF_LabelNode
|
|
// purpose : Constructor with TDF_Data*, only used for root node.
|
|
//=======================================================================
|
|
|
|
TDF_LabelNode::TDF_LabelNode(TDF_Data* aDataPtr)
|
|
: myFather(NULL), // The sign it is the root.
|
|
#ifdef KEEP_LOCAL_ROOT
|
|
myBrother(NULL),
|
|
#else
|
|
myBrother((TDF_LabelNode*)aDataPtr),
|
|
#endif
|
|
myFirstChild(NULL),
|
|
myLastFoundChild(NULL), // jfa 10.01.2003
|
|
myTag(0), // Always 0 for root.
|
|
myFlags(0),
|
|
#ifdef KEEP_LOCAL_ROOT
|
|
myData(aDataPtr)
|
|
#endif
|
|
{
|
|
#ifdef OCCT_DEBUG
|
|
myDebugEntry = '0';
|
|
#endif
|
|
}
|
|
|
|
//=================================================================================================
|
|
|
|
TDF_LabelNode::TDF_LabelNode(const Standard_Integer aTag, TDF_LabelNode* aFather)
|
|
: myFather(aFather),
|
|
myBrother(NULL),
|
|
myFirstChild(NULL),
|
|
myLastFoundChild(NULL), // jfa 10.01.2003
|
|
myTag(aTag),
|
|
myFlags(0),
|
|
#ifdef KEEP_LOCAL_ROOT
|
|
myData(NULL)
|
|
#endif
|
|
{
|
|
if (aFather != NULL)
|
|
{
|
|
Depth(aFather->Depth() + 1);
|
|
#ifdef KEEP_LOCAL_ROOT
|
|
myData = aFather->Data();
|
|
#endif
|
|
}
|
|
#ifdef OCCT_DEBUG
|
|
myDebugEntry = myFather->myDebugEntry;
|
|
myDebugEntry += ':';
|
|
myDebugEntry += aTag;
|
|
#endif
|
|
}
|
|
|
|
//=================================================================================================
|
|
|
|
void TDF_LabelNode::Destroy(const TDF_HAllocator& theAllocator)
|
|
{
|
|
// MSV 21.03.2003: do not delete brother, rather delete all children in a loop
|
|
// to avoid stack overflow
|
|
while (myFirstChild != NULL)
|
|
{
|
|
TDF_LabelNode* aSecondChild = myFirstChild->Brother();
|
|
myFirstChild->Destroy(theAllocator);
|
|
myFirstChild = aSecondChild;
|
|
}
|
|
this->~TDF_LabelNode();
|
|
myFather = myBrother = myFirstChild = myLastFoundChild = NULL;
|
|
myTag = myFlags = 0;
|
|
|
|
// deallocate memory (does nothing for IncAllocator)
|
|
theAllocator->Free(this);
|
|
}
|
|
|
|
//=======================================================================
|
|
// function : AddAttribute
|
|
// purpose : Adds an attribute at the first or the specified position.
|
|
//=======================================================================
|
|
|
|
void TDF_LabelNode::AddAttribute(const Handle(TDF_Attribute)& afterAtt,
|
|
const Handle(TDF_Attribute)& newAtt)
|
|
{
|
|
newAtt->myFlags = 1; // Valid.
|
|
newAtt->myLabelNode = this;
|
|
if (afterAtt.IsNull())
|
|
{ // Inserts at beginning.
|
|
newAtt->myNext = myFirstAttribute;
|
|
myFirstAttribute = newAtt;
|
|
}
|
|
else
|
|
{ // Inserts at specified place.
|
|
newAtt->myNext = afterAtt->myNext;
|
|
afterAtt->myNext = newAtt;
|
|
}
|
|
}
|
|
|
|
//=======================================================================
|
|
// function : RemoveAttribute
|
|
// purpose : Removes an attribute from the first or the specified position.
|
|
//=======================================================================
|
|
|
|
void TDF_LabelNode::RemoveAttribute(const Handle(TDF_Attribute)& afterAtt,
|
|
const Handle(TDF_Attribute)& oldAtt)
|
|
{
|
|
oldAtt->myFlags = 0; // Invalid.
|
|
oldAtt->myLabelNode = NULL;
|
|
if (afterAtt.IsNull())
|
|
{ // Removes from beginning.
|
|
myFirstAttribute = oldAtt->myNext;
|
|
}
|
|
else
|
|
{ // Removes from specified place.
|
|
afterAtt->myNext = oldAtt->myNext;
|
|
}
|
|
// Nullifier le next induit l'iterateur d'attribut en erreur.
|
|
// oldAtt->myNext.Nullify();
|
|
}
|
|
|
|
//=======================================================================
|
|
// function : RootNode
|
|
// purpose : used for non const object.
|
|
//=======================================================================
|
|
|
|
TDF_LabelNode* TDF_LabelNode::RootNode()
|
|
{
|
|
#ifdef KEEP_LOCAL_ROOT
|
|
return myData ? myData->myRoot : 0L;
|
|
#else
|
|
TDF_LabelNode* lp = this;
|
|
while (lp->myFather != NULL)
|
|
lp = lp->myFather;
|
|
return lp;
|
|
#endif
|
|
}
|
|
|
|
//=======================================================================
|
|
// function : RootNode
|
|
// purpose : used for const object.
|
|
//=======================================================================
|
|
|
|
const TDF_LabelNode* TDF_LabelNode::RootNode() const
|
|
{
|
|
#ifdef KEEP_LOCAL_ROOT
|
|
return myData ? myData->myRoot : 0L;
|
|
#else
|
|
const TDF_LabelNode* lp = this;
|
|
while (lp->myFather != NULL)
|
|
lp = lp->myFather;
|
|
return lp;
|
|
#endif
|
|
}
|
|
|
|
//=================================================================================================
|
|
|
|
TDF_Data* TDF_LabelNode::Data() const
|
|
{
|
|
#ifdef KEEP_LOCAL_ROOT
|
|
return myData;
|
|
#else
|
|
const TDF_LabelNode* ln = RootNode()->myBrother;
|
|
return ((TDF_Data*)ln);
|
|
#endif
|
|
}
|
|
|
|
//=================================================================================================
|
|
|
|
void TDF_LabelNode::AllMayBeModified()
|
|
{
|
|
MayBeModified(Standard_True);
|
|
if (myFather && !myFather->MayBeModified())
|
|
myFather->AllMayBeModified();
|
|
}
|