65 void Insert( T* parentNode, T* sourceNode )
68 TASSERT( sourceNode->IsLinked() ==
TFALSE,
"The source node shouldn't be linked" );
74 T* firstAttached = parentNode->Child();
76 if ( firstAttached !=
TNULL )
79 T* lastAttached = firstAttached->Prev();
81 lastAttached->m_Next = sourceNode;
82 firstAttached->m_Prev = sourceNode;
84 sourceNode->m_Next = firstAttached;
85 sourceNode->m_Prev = lastAttached;
90 parentNode->m_Child = sourceNode;
93 sourceNode->m_Tree =
this;
94 sourceNode->m_Parent = parentNode;
115 if ( parentNode ==
TNULL )
124 Insert( parentNode, sourceNode );
131 T* nodeParent = node.Parent();
133 if ( nodeRoot !=
TNULL )
136 if ( nodeRoot !=
this )
146 T* attachedNode = node.Child();
148 while ( attachedNode !=
TNULL )
153 Insert( node.Parent(), attachedNode );
155 attachedNode = node.Child();
156 TIMPLEMENT_D(
"It seems to be unused and I hope it is. I don't know if it works and what it should do" );
160 if ( nodeParent !=
TNULL )
163 if ( nodeParent->Child() == &node )
165 nodeParent->m_Child = ( node.Next() != &node ) ? node.Next() :
TNULL;
168 node.m_Parent =
TNULL;
171 node.m_Prev->m_Next = node.m_Next;
172 node.m_Next->m_Prev = node.m_Prev;
181 return Remove( *node, flag );
186 while ( node !=
TNULL )
188 T* next = ( node->Next() != node ) ? node->Next() :
TNULL;
190 if ( node->Child() !=
TNULL )
195 if ( node->Tree() ==
this )
200 if ( node->Tree() ==
TNULL || node->Tree() ==
this )
202 T* nodeParent = node->Parent();
204 if ( nodeParent !=
TNULL )
207 if ( nodeParent->Child() == node )
209 nodeParent->m_Child = ( node->Next() != node ) ? node->Next() :
TNULL;
212 node->m_Parent =
TNULL;
215 node->m_Prev->m_Parent = node->m_Next;
216 node->m_Next->m_Child = node->m_Prev;
219 node->m_Tree =
TNULL;
231 while ( node !=
TNULL )
#define TSTATICCAST(POINTERTYPE, VALUE)
#define TIMPLEMENT_D(DESC)
#define TOSHI_NAMESPACE_START
#define TOSHI_NAMESPACE_END
void DeleteRecurse(T *node)
void Insert(T *parentNode, T *sourceNode)
Inserts node as a child of another node.
void ReInsert(T *parentNode, T *sourceNode)
Tries to remove sourceNode from the tree and inserts it to the parentNode or to the root.
void InsertAtRoot(T *sourceNode)
Inserts node to the default tree.
T * Remove(T *node, TBOOL flag=false)
T * Remove(T &node, TBOOL flag=false)
TBOOL IsChildOfDefaultRoot() const
TNodeTree< T > * Tree() const