17 #ifndef __itkTreeIteratorBase_txx
18 #define __itkTreeIteratorBase_txx
27 template <
class TTreeType>
36 m_Root =
dynamic_cast<const TreeNodeType*
>(tree->GetRoot());
46 template <
class TTreeType>
58 m_Tree =
const_cast<TTreeType*
>(tree);
64 template <
class TTreeType>
68 return m_Position->Get();
72 template <
class TTreeType>
77 m_Position->Set(element);
83 template <
class TTreeType>
87 if ( m_Position ==
NULL && m_Root ==
NULL )
89 bool returnValue =
false;
92 returnValue =
const_cast<TTreeType*
>(m_Tree)->SetRoot( element );
95 m_Root =
dynamic_cast<const TreeNodeType*
>(
const_cast<TTreeType*
>(m_Tree)->GetRoot());
101 else if ( m_Position ==
NULL )
106 typename TreeNodeType::Pointer node = TreeNodeType::New();
108 m_Position->AddChild( node );
113 childIterator->
m_Position =
dynamic_cast<TreeNodeType*
>( m_Position->GetChild( m_Position->ChildPosition(node)) );
115 delete childIterator;
121 template <
class TTreeType>
127 typename TreeNodeType::Pointer node = TreeNodeType::New();
129 m_Position->AddChild(node);
134 childIterator->
m_Position =
dynamic_cast<TreeNodeType*
>( m_Position->GetChild( m_Position->ChildPosition(node)) );
136 delete childIterator;
144 template <
class TTreeType>
148 return !(m_Position->HasChildren());
152 template <
class TTreeType>
156 if ( m_Root ==
NULL )
161 if ( m_Position == m_Root )
169 template <
class TTreeType>
173 if ( subTree.Count() == 0 )
178 if(!subTree.GetRoot())
183 if ( m_Root ==
NULL )
185 m_Root =
static_cast<const TreeNodeType*
>(subTree.GetRoot());
189 if ( m_Position ==
NULL )
193 m_Position->AddChild( const_cast<TreeNodeType*>(static_cast<const TreeNodeType*>(subTree.GetRoot())) );
199 template <
class TTreeType>
203 typename TTreeType::Pointer tree = TTreeType::New();
204 tree->SetRoot(m_Position);
205 tree->SetSubtree(
true);
210 template <
class TTreeType>
214 if ( m_Position ==
NULL )
218 if ( m_Position->GetChild( number ) !=
NULL )
226 template <
class TTreeType>
234 return m_Position->ChildPosition( element );
238 template <
class TTreeType>
242 if( !HasChild( number ) )
254 delete childIterator;
264 template <
class TTreeType>
268 if ( m_Position ==
NULL )
272 return m_Position->CountChildren( );
276 template <
class TTreeType>
280 return ( m_Position !=
NULL && m_Position->GetParent() !=
NULL);
284 template <
class TTreeType>
288 if ( m_Position ==
NULL )
293 if( m_Position->HasParent() == false )
299 typename TreeNodeType::Pointer position = m_Position;
302 parent->Remove( const_cast<TreeNodeType*>(m_Position) );
305 while (m_Position->CountChildren() > 0)
308 parent->AddChild( child );
318 template <
class TTreeType>
322 itkGenericOutputMacro(
"Not implemented yet");
330 template <
class TTreeType>
334 if(m_Position ==
NULL)
339 return m_Position->GetParent();
343 template <
class TTreeType>
346 itkGenericOutputMacro(
"Not implemented yet");
353 template <
class TTreeType>
356 if ( m_Position ==
NULL )
372 template <
class TTreeType>
375 if ( m_Position ==
NULL )
380 if( !m_Position->HasParent() )
385 m_Position =
dynamic_cast<TreeNodeType*
>(m_Position->GetParent());
390 template <
class TTreeType>
409 template <
class TTreeType>
414 if ( !m_Position->HasChildren() )
418 while (this->Next() )
426 template <
class TTreeType>
434 template <
class TTreeType>
442 template <
class TTreeType>
450 template <
class TTreeType>
458 template <
class TTreeType>
462 if ( m_Position ==
NULL )
468 typename TreeNodeType::Pointer position = m_Position;
470 if ( m_Position->HasParent() )
473 parent->Remove( m_Position );
475 else if (m_Root == m_Position)
481 m_Position->SetParent(
NULL);
483 while (m_Position->CountChildren() > 0)
487 m_Position->Remove( child );
499 template <
class TTreeType>