41#ifndef PB_DS_SYNTH_E_ACCESS_TRAITS_HPP 
   42#define PB_DS_SYNTH_E_ACCESS_TRAITS_HPP 
   51#define PB_DS_SYNTH_E_ACCESS_TRAITS_T_DEC \ 
   52    template<typename Type_Traits, bool Set, typename _ATraits> 
   54#define PB_DS_SYNTH_E_ACCESS_TRAITS_C_DEC \ 
   55    synth_access_traits<Type_Traits, Set, _ATraits> 
   58    template<
typename Type_Traits, 
bool Set, 
typename _ATraits>
 
   61      typedef _ATraits                                  base_type;
 
   62      typedef typename base_type::const_iterator        const_iterator;
 
   63      typedef Type_Traits                               type_traits;
 
   64      typedef typename type_traits::const_reference     const_reference;
 
   65      typedef typename type_traits::key_const_reference key_const_reference;
 
   72      equal_prefixes(const_iterator, const_iterator, const_iterator,
 
   73                     const_iterator, 
bool compare_after = 
true) 
const;
 
   76      equal_keys(key_const_reference, key_const_reference) 
const;
 
   79      cmp_prefixes(const_iterator, const_iterator, const_iterator,
 
   80                   const_iterator, 
bool compare_after = 
false) 
const;
 
   83      cmp_keys(key_const_reference, key_const_reference) 
const;
 
   85      inline static key_const_reference
 
   86      extract_key(const_reference);
 
   90      operator()(key_const_reference, key_const_reference);
 
   94      inline static key_const_reference
 
   95      extract_key(const_reference, true_type);
 
   97      inline static key_const_reference
 
   98      extract_key(const_reference, false_type);
 
  100      static integral_constant<int, Set> s_set_ind;
 
  103    PB_DS_SYNTH_E_ACCESS_TRAITS_T_DEC
 
  104    integral_constant<int,Set>
 
  105    PB_DS_SYNTH_E_ACCESS_TRAITS_C_DEC::s_set_ind;
 
  107    PB_DS_SYNTH_E_ACCESS_TRAITS_T_DEC
 
  108    PB_DS_SYNTH_E_ACCESS_TRAITS_C_DEC::
 
  109    synth_access_traits()
 
  112    PB_DS_SYNTH_E_ACCESS_TRAITS_T_DEC
 
  113    PB_DS_SYNTH_E_ACCESS_TRAITS_C_DEC::
 
  114    synth_access_traits(
const _ATraits& r_traits) 
 
  118    PB_DS_SYNTH_E_ACCESS_TRAITS_T_DEC
 
  120    PB_DS_SYNTH_E_ACCESS_TRAITS_C_DEC::
 
  121    equal_prefixes(const_iterator b_l, const_iterator e_l, const_iterator b_r,
 
  122                   const_iterator e_r, 
bool compare_after )
 const 
  128          if (base_type::e_pos(*b_l) != base_type::e_pos(*b_r))
 
  133      return (!compare_after || b_r == e_r);
 
  136    PB_DS_SYNTH_E_ACCESS_TRAITS_T_DEC
 
  138    PB_DS_SYNTH_E_ACCESS_TRAITS_C_DEC::
 
  139    equal_keys(key_const_reference r_lhs_key,
 
  140               key_const_reference r_rhs_key)
 const 
  142      return equal_prefixes(base_type::begin(r_lhs_key),
 
  143                            base_type::end(r_lhs_key),
 
  144                            base_type::begin(r_rhs_key),
 
  145                            base_type::end(r_rhs_key),
 
  149    PB_DS_SYNTH_E_ACCESS_TRAITS_T_DEC
 
  151    PB_DS_SYNTH_E_ACCESS_TRAITS_C_DEC::
 
  152    cmp_prefixes(const_iterator b_l, const_iterator e_l, const_iterator b_r,
 
  153                 const_iterator e_r, 
bool compare_after )
 const 
  160          const typename base_type::size_type l_pos = base_type::e_pos(*b_l);
 
  161          const typename base_type::size_type r_pos = base_type::e_pos(*b_r);
 
  163            return l_pos < r_pos;
 
  173    PB_DS_SYNTH_E_ACCESS_TRAITS_T_DEC
 
  175    PB_DS_SYNTH_E_ACCESS_TRAITS_C_DEC::
 
  176    cmp_keys(key_const_reference r_lhs_key,
 
  177             key_const_reference r_rhs_key)
 const 
  179      return cmp_prefixes(base_type::begin(r_lhs_key),
 
  180                          base_type::end(r_lhs_key),
 
  181                          base_type::begin(r_rhs_key),
 
  182                          base_type::end(r_rhs_key),
 
  186    PB_DS_SYNTH_E_ACCESS_TRAITS_T_DEC
 
  187    inline typename PB_DS_SYNTH_E_ACCESS_TRAITS_C_DEC::key_const_reference
 
  188    PB_DS_SYNTH_E_ACCESS_TRAITS_C_DEC::
 
  189    extract_key(const_reference r_val)
 
  190    { 
return extract_key(r_val, s_set_ind); }
 
  192    PB_DS_SYNTH_E_ACCESS_TRAITS_T_DEC
 
  193    inline typename PB_DS_SYNTH_E_ACCESS_TRAITS_C_DEC::key_const_reference
 
  194    PB_DS_SYNTH_E_ACCESS_TRAITS_C_DEC::
 
  195    extract_key(const_reference r_val, true_type)
 
  198    PB_DS_SYNTH_E_ACCESS_TRAITS_T_DEC
 
  199    inline typename PB_DS_SYNTH_E_ACCESS_TRAITS_C_DEC::key_const_reference
 
  200    PB_DS_SYNTH_E_ACCESS_TRAITS_C_DEC::
 
  201    extract_key(const_reference r_val, false_type)
 
  202    { 
return r_val.first; }
 
  205    PB_DS_SYNTH_E_ACCESS_TRAITS_T_DEC
 
  207    PB_DS_SYNTH_E_ACCESS_TRAITS_C_DEC::
 
  208    operator()(key_const_reference r_lhs, key_const_reference r_rhs)
 
  209    { 
return cmp_keys(r_lhs, r_rhs); }
 
  212#undef PB_DS_SYNTH_E_ACCESS_TRAITS_T_DEC 
  213#undef PB_DS_SYNTH_E_ACCESS_TRAITS_C_DEC 
GNU extensions for policy-based data structures for public use.
Synthetic element access traits.