41 #ifndef PB_DS_TRIE_POLICY_BASE_HPP
42 #define PB_DS_TRIE_POLICY_BASE_HPP
51 template<
typename Node_CItr,
typename Node_Itr,
52 typename _ATraits,
typename _Alloc>
61 typedef typename allocator_type::size_type
size_type;
66 typedef typename node_iterator::value_type
iterator;
113 #define PB_DS_CLASS_T_DEC \
114 template<typename Node_CItr, typename Node_Itr, \
115 typename _ATraits, typename _Alloc>
117 #define PB_DS_CLASS_C_DEC \
118 trie_policy_base<Node_CItr, Node_Itr, _ATraits, _Alloc>
121 typename PB_DS_CLASS_C_DEC::size_type
123 common_prefix_len(node_iterator nd_it, e_const_iterator b_r,
124 e_const_iterator e_r,
const access_traits& r_traits)
126 prefix_range_t pref_range = nd_it.valid_prefix();
128 e_const_iterator b_l = pref_range.first;
129 e_const_iterator e_l = pref_range.second;
131 const size_type range_length_l = std::distance(b_l, e_l);
132 const size_type range_length_r = std::distance(b_r, e_r);
134 if (range_length_r < range_length_l)
143 if (r_traits.e_pos(*b_l) != r_traits.e_pos(*b_r))
155 typename PB_DS_CLASS_C_DEC::iterator
157 leftmost_it(node_iterator nd_it)
159 if (nd_it.num_children() == 0)
162 return leftmost_it(nd_it.get_child(0));
166 typename PB_DS_CLASS_C_DEC::iterator
168 rightmost_it(node_iterator nd_it)
170 const size_type num_children = nd_it.num_children();
172 if (num_children == 0)
175 return rightmost_it(nd_it.get_child(num_children - 1));
181 less(e_const_iterator b_l, e_const_iterator e_l,
182 e_const_iterator b_r, e_const_iterator e_r,
183 const access_traits& r_traits)
190 size_type l_pos = r_traits.e_pos(*b_l);
191 size_type r_pos = r_traits.e_pos(*b_r);
193 return (l_pos < r_pos);
201 #undef PB_DS_CLASS_T_DEC
202 #undef PB_DS_CLASS_C_DEC
207 #endif // #ifndef PB_DS_TRIE_POLICY_BASE_HPP
std::pair< e_const_iterator, e_const_iterator > prefix_range_t
Definition: trie_policy_base.hpp:94
_Alloc allocator_type
Definition: trie_policy_base.hpp:60
virtual const access_traits & get_access_traits() const =0
base_type::key_type key_type
Definition: trie_policy_base.hpp:67
Base class for trie policies.
Definition: trie_policy_base.hpp:53
virtual node_const_iterator node_end() const =0
branch_policy< Node_CItr, Node_Itr, _Alloc > base_type
Definition: trie_policy_base.hpp:56
Represents no type, or absence of type, for template tricks.
Definition: tag_and_trait.hpp:210
static iterator rightmost_it(node_iterator)
allocator_type::size_type size_type
Definition: trie_policy_base.hpp:61
static size_type common_prefix_len(node_iterator, e_const_iterator, e_const_iterator, const access_traits &)
Primary template, base class for branch structure policies.
Definition: branch_policy.hpp:52
access_traits::const_iterator e_const_iterator
Definition: trie_policy_base.hpp:93
node_const_iterator::value_type const_iterator
Definition: trie_policy_base.hpp:65
static iterator leftmost_it(node_iterator)
base_type::key_const_reference key_const_reference
Definition: trie_policy_base.hpp:68
#define PB_DS_CLASS_T_DEC
Definition: trie_policy_base.hpp:113
Node_CItr node_const_iterator
Definition: trie_policy_base.hpp:63
virtual const_iterator end() const =0
rebind_k::const_reference key_const_reference
Definition: branch_policy.hpp:69
null_type metadata_type
Definition: trie_policy_base.hpp:62
_ATraits access_traits
Definition: trie_policy_base.hpp:59
virtual node_const_iterator node_begin() const =0
value_type::first_type key_type
Definition: branch_policy.hpp:57
node_iterator::value_type iterator
Definition: trie_policy_base.hpp:66
Node_Itr node_iterator
Definition: trie_policy_base.hpp:64
void swap(exception_ptr &__lhs, exception_ptr &__rhs)
Definition: exception_ptr.h:160
static bool less(e_const_iterator, e_const_iterator, e_const_iterator, e_const_iterator, const access_traits &)