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.