aimstil  5.0.5
binary_tree.tpp
Go to the documentation of this file.
1 
2 namespace til
3 {
4 
5  //---------------------------------------------------------------------------
6 
7  template < typename T, std::size_t N >
8  NaryTree< T, N >::
9  ~NaryTree()
10  {
11  if (&*(root()))
12  {
13  post_order_scan(root(), Destructor());
14  }
15  }
16 
17  //---------------------------------------------------------------------------
18 
19  template < typename T, std::size_t N >
20  typename NaryTree< T, N >::iterator
21  NaryTree< T, N >::
22  addChild(Node * parent, std::size_t childNumber, T value)
23  {
24  // Create new node
25  Node * newNode = new Node(value);
26  ++m_size;
27  // Check that child has a parent
28  if (parent)
29  {
30  // Warn parent it has a new child with given number
31  parent->child(childNumber) = newNode;
32  }
33  // If child has no parent, it is a root:
34  // Check that there is no root yet
35  else if (m_root)
36  {
37  // Can't have two roots: throw
38  throw TreeRootAlreadyDefined();
39  }
40  else
41  {
42  // Set new root
43  m_root = newNode;
44  }
45  return iterator(newNode);
46  }
47 
48  //---------------------------------------------------------------------------
49 
50 } // namespace til
51