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>
 
   59       typedef _ATraits              access_traits;
 
   60       typedef _Alloc                    allocator_type;
 
   61       typedef typename allocator_type::size_type    size_type;
 
   63       typedef Node_CItr                 node_const_iterator;
 
   64       typedef Node_Itr                  node_iterator;
 
   65       typedef typename node_const_iterator::value_type  const_iterator;
 
   66       typedef typename node_iterator::value_type    iterator;
 
   67       typedef typename base_type::key_type      key_type;
 
   68       typedef typename base_type::key_const_reference   key_const_reference;
 
   71       virtual const_iterator
 
   77       virtual node_const_iterator
 
   78       node_begin() 
const = 0;
 
   83       virtual node_const_iterator
 
   89       virtual const access_traits&
 
   90       get_access_traits() 
const = 0;
 
   93       typedef typename access_traits::const_iterator    e_const_iterator;
 
   98       common_prefix_len(node_iterator, e_const_iterator,
 
   99             e_const_iterator, 
const access_traits&);
 
  102       leftmost_it(node_iterator);
 
  105       rightmost_it(node_iterator);
 
  108       less(e_const_iterator, e_const_iterator, e_const_iterator,
 
  109        e_const_iterator, 
const access_traits&);
 
  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;
 
  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 
GNU extensions for policy-based data structures for public use. 
 
iterator_traits< _InputIterator >::difference_type distance(_InputIterator __first, _InputIterator __last)
A generalization of pointer arithmetic. 
 
Represents no type, or absence of type, for template tricks. 
 
Struct holding two objects of arbitrary type. 
 
void swap(_Tp &, _Tp &) noexcept(__and_< is_nothrow_move_constructible< _Tp >, is_nothrow_move_assignable< _Tp >>::value)
Swaps two values. 
 
Primary template, base class for branch structure policies. 
 
Base class for trie policies.