41 #ifndef PB_DS_TRIE_POLICY_HPP
42 #define PB_DS_TRIE_POLICY_HPP
51 #define PB_DS_CLASS_T_DEC \
52 template<typename String, typename String::value_type Min_E_Val, \
53 typename String::value_type Max_E_Val, bool Reverse, \
56 #define PB_DS_CLASS_C_DEC \
57 trie_string_access_traits<String, Min_E_Val,Max_E_Val,Reverse,_Alloc>
70 typename String::value_type Min_E_Val = detail::__numeric_traits<typename String::value_type>::__min,
71 typename String::value_type Max_E_Val = detail::__numeric_traits<typename String::value_type>::__max,
77 typedef typename _Alloc::size_type size_type;
78 typedef String key_type;
79 typedef typename _Alloc::template rebind<key_type> __rebind_k;
80 typedef typename __rebind_k::other::const_reference key_const_reference;
88 typedef typename detail::__conditional_type<Reverse, \
89 typename String::const_reverse_iterator, \
93 typedef typename std::iterator_traits<const_iterator>::value_type
e_type;
97 min_e_val = Min_E_Val,
98 max_e_val = Max_E_Val,
99 max_size = max_e_val - min_e_val + 1
101 PB_DS_STATIC_ASSERT(min_max_size, max_size >= 2);
105 inline static const_iterator
106 begin(key_const_reference);
110 inline static const_iterator
111 end(key_const_reference);
114 inline static size_type
118 inline static const_iterator
119 begin_imp(key_const_reference, detail::false_type);
121 inline static const_iterator
122 begin_imp(key_const_reference, detail::true_type);
124 inline static const_iterator
125 end_imp(key_const_reference, detail::false_type);
127 inline static const_iterator
128 end_imp(key_const_reference, detail::true_type);
130 static detail::integral_constant<int, Reverse> s_rev_ind;
135 #undef PB_DS_CLASS_T_DEC
136 #undef PB_DS_CLASS_C_DEC
138 #define PB_DS_CLASS_T_DEC \
139 template<typename Node_CItr,typename Node_Itr, \
140 typename _ATraits, typename _Alloc>
142 #define PB_DS_CLASS_C_DEC \
143 trie_prefix_search_node_update<Node_CItr, Node_Itr, \
146 #define PB_DS_TRIE_POLICY_BASE \
147 detail::trie_policy_base<Node_CItr,Node_Itr,_ATraits, _Alloc>
151 template<
typename Node_CItr,
158 typedef PB_DS_TRIE_POLICY_BASE
base_type;
161 typedef typename base_type::key_type key_type;
162 typedef typename base_type::key_const_reference key_const_reference;
176 typedef Node_Itr node_iterator;
177 typedef Node_CItr node_const_iterator;
178 typedef typename node_iterator::value_type iterator;
179 typedef typename node_const_iterator::value_type const_iterator;
204 operator()(node_iterator node_it, node_const_iterator end_nd_it)
const;
208 next_child(node_iterator, a_const_iterator, a_const_iterator,
209 node_iterator,
const access_traits&);
212 virtual const_iterator
220 virtual node_const_iterator
221 node_begin()
const = 0;
224 virtual node_iterator
228 virtual node_const_iterator
229 node_end()
const = 0;
232 virtual node_iterator
236 virtual const access_traits&
237 get_access_traits()
const = 0;
242 #undef PB_DS_CLASS_C_DEC
244 #define PB_DS_CLASS_C_DEC \
245 trie_order_statistics_node_update<Node_CItr, Node_Itr, \
249 template<
typename Node_CItr,
256 typedef PB_DS_TRIE_POLICY_BASE
base_type;
259 typedef _ATraits access_traits;
260 typedef typename access_traits::const_iterator a_const_iterator;
261 typedef _Alloc allocator_type;
262 typedef typename allocator_type::size_type size_type;
263 typedef typename base_type::key_type key_type;
264 typedef typename base_type::key_const_reference key_const_reference;
266 typedef size_type metadata_type;
267 typedef Node_CItr node_const_iterator;
268 typedef Node_Itr node_iterator;
269 typedef typename node_const_iterator::value_type const_iterator;
270 typedef typename node_iterator::value_type iterator;
276 inline const_iterator
306 operator()(node_iterator, node_const_iterator)
const;
309 typedef typename base_type::const_reference const_reference;
310 typedef typename base_type::const_pointer const_pointer;
312 typedef typename _Alloc::template rebind<metadata_type> __rebind_m;
313 typedef typename __rebind_m::other __rebind_ma;
314 typedef typename __rebind_ma::const_reference metadata_const_reference;
315 typedef typename __rebind_ma::reference metadata_reference;
331 virtual node_const_iterator
332 node_begin()
const = 0;
335 virtual node_iterator
340 virtual node_const_iterator
341 node_end()
const = 0;
344 virtual node_iterator
348 virtual access_traits&
349 get_access_traits() = 0;
354 #undef PB_DS_CLASS_T_DEC
355 #undef PB_DS_CLASS_C_DEC
356 #undef PB_DS_TRIE_POLICY_BASE
allocator_type::size_type size_type
Size type.
detail::__conditional_type< Reverse, typename String::const_reverse_iterator, typename String::const_iterator >::__type const_iterator
Element const iterator type.
_Alloc allocator_type
_Alloc type.
access_traits::const_iterator a_const_iterator
Const element iterator.
void operator()(node_iterator node_it, node_const_iterator end_nd_it) const
Called to update a node's metadata.
GNU extensions for policy-based data structures for public use.
std::pair< const_iterator, const_iterator > prefix_range(key_const_reference) const
Finds the const iterator range corresponding to all values whose prefixes match r_key.
static const_iterator begin(key_const_reference)
Returns a const_iterator to the first element of key_const_reference agumnet.
Represents no type, or absence of type, for template tricks.
The standard allocator, as per [20.4].
static const_iterator end(key_const_reference)
Returns a const_iterator to the after-last element of key_const_reference argument.
A node updator that allows tries to be searched for the range of values that match a certain prefix...
std::iterator_traits< const_iterator >::value_type e_type
Element type.
void operator()(node_iterator, node_const_iterator) const
Updates the rank of a node through a node_iterator node_it; end_nd_it is the end node iterator...
static size_type e_pos(e_type e)
Maps an element to a position.
_ATraits access_traits
Element access traits.
Functor updating ranks of entrees.
const_iterator find_by_order(size_type) const
Finds an entry by __order. Returns a const_iterator to the entry with the __order order...
Struct holding two objects of arbitrary type.
basic_string< char > string
A string of char.
size_type order_of_key(key_const_reference) const
Returns the order of a key within a sequence. For exapmle, if r_key is the smallest key...
Base class for trie policies.
size_type order_of_prefix(a_const_iterator, a_const_iterator) const
Returns the order of a prefix within a sequence. For exapmle, if [b, e] is the smallest prefix...