9 #ifndef __libutilxx__sella__container__radix_tree_it_H__
10 #define __libutilxx__sella__container__radix_tree_it_H__
17 template <
typename K,
typename T>
class radix_tree;
20 template <
typename K,
typename T>
21 class radix_tree_it :
public std::iterator<std::forward_iterator_tag, std::pair<K, T> > {
28 std::pair<const K, T>& operator* ()
const;
29 std::pair<const K, T>* operator-> ()
const;
44 template <
typename K,
typename T>
52 typename radix_tree_node<K, T>::it_child it = parent->m_children.find(node->m_key);
53 assert(it != parent->m_children.end());
56 if (it == parent->m_children.end())
57 return increment(parent);
59 return descend(it->second);
62 template <
typename K,
typename T>
63 radix_tree_node<K, T>* radix_tree_it<K, T>::descend(radix_tree_node<K, T>* node)
const
68 typename radix_tree_node<K, T>::it_child it = node->m_children.begin();
70 assert(it != node->m_children.end());
72 return descend(it->second);
75 template <
typename K,
typename T>
76 std::pair<const K, T>& radix_tree_it<K, T>::operator* ()
const
78 return *m_pointee->m_value;
81 template <
typename K,
typename T>
82 std::pair<const K, T>* radix_tree_it<K, T>::operator-> ()
const
84 return m_pointee->m_value;
87 template <
typename K,
typename T>
88 bool radix_tree_it<K, T>::operator!= (
const radix_tree_it<K, T> &lhs)
const
90 return m_pointee != lhs.m_pointee;
93 template <
typename K,
typename T>
94 bool radix_tree_it<K, T>::operator== (
const radix_tree_it<K, T> &lhs)
const
96 return m_pointee == lhs.m_pointee;
99 template <
typename K,
typename T>
100 const radix_tree_it<K, T>& radix_tree_it<K, T>::operator++ ()
102 if (m_pointee != NULL)
103 m_pointee = increment(m_pointee);
107 template <
typename K,
typename T>
108 radix_tree_it<K, T> radix_tree_it<K, T>::operator++ (
int)
110 radix_tree_it<K, T> copy(*
this);