libutil++  1.9.3
 All Classes Functions Variables
radix_tree_node.h
1 /*
2 ** libutil++
3 ** $Id: radix_tree_node.h 1653 2016-02-28 19:54:59Z sella $
4 ** Copyright (c) 2011-2016 Digital Genesis, LLC. All Rights Reserved.
5 ** Released under the LGPL Version 2.1 License.
6 ** http://www.digitalgenesis.com
7 */
8 
9 #ifndef __libutilxx__sella__container__radix_tree_node_H__
10 #define __libutilxx__sella__container__radix_tree_node_H__
11 
12 #include <map>
13 
14 namespace sella {
15  namespace container {
16  template <typename K, typename T>
17  class radix_tree_node {
18  friend class radix_tree<K, T>;
19  friend class radix_tree_it<K, T>;
20 
21  typedef std::pair<const K, T> value_type;
22  typedef typename std::map<K, radix_tree_node<K, T>* >::iterator it_child;
23 
24  private:
25  radix_tree_node() : m_children(), m_parent(NULL), m_value(NULL), m_depth(0), m_is_leaf(false), m_key() { }
26  radix_tree_node(const value_type &val);
27  radix_tree_node(const radix_tree_node&); // delete
28  radix_tree_node& operator=(const radix_tree_node&); // delete
29 
30  ~radix_tree_node();
31 
32  std::map<K, radix_tree_node<K, T>*> m_children;
33  radix_tree_node<K, T> *m_parent;
34  value_type *m_value;
35  int m_depth;
36  bool m_is_leaf;
37  K m_key;
38  };
39 
40  template <typename K, typename T>
41  radix_tree_node<K, T>::radix_tree_node(const value_type &val) :
42  m_children(),
43  m_parent(NULL),
44  m_value(NULL),
45  m_depth(0),
46  m_is_leaf(false),
47  m_key()
48  {
49  m_value = new value_type(val);
50  }
51 
52  template <typename K, typename T>
53  radix_tree_node<K, T>::~radix_tree_node()
54  {
55  it_child it;
56  for (it = m_children.begin(); it != m_children.end(); ++it) {
57  delete it->second;
58  }
59  delete m_value;
60  }
61  }
62 }
63 
64 
65 #endif
66 
67 /*
68 ** vim: noet ts=3 sw=3
69 */