41 #ifndef PB_DS_TYPES_TRAITS_HPP
42 #define PB_DS_TYPES_TRAITS_HPP
60 template<
typename Key,
typename Mapped>
63 static const bool __simple = is_simple<Key>::value
64 && is_simple<Mapped>::value;
65 typedef integral_constant<int, __simple> indicator;
69 template<
typename Key>
72 typedef integral_constant<int, is_simple<Key>::value> indicator;
77 template<
typename _Tv>
80 typedef _Tv value_type;
85 template<
typename _Th>
88 typedef _Th hash_type;
94 template<
typename _Tv,
typename _Th>
100 template<
typename _Tv>
106 template<
typename Key,
typename Mapped,
typename _Alloc,
bool Store_Hash>
113 template<
typename Key,
typename Mapped,
typename _Alloc>
117 typedef typename _Alloc::size_type size_type;
120 typedef typename _Alloc::template rebind<Mapped> __rebind_m;
121 typedef typename __rebind_m::other __rebind_ma;
123 typedef typename _Alloc::template rebind<__value_type> __rebind_v;
124 typedef typename __rebind_v::other __rebind_va;
127 typedef typename __rebind_ma::value_type mapped_type;
128 typedef typename __rebind_ma::pointer mapped_pointer;
129 typedef typename __rebind_ma::const_pointer mapped_const_pointer;
130 typedef typename __rebind_ma::reference mapped_reference;
131 typedef typename __rebind_ma::const_reference mapped_const_reference;
133 typedef typename __rebind_va::value_type value_type;
134 typedef typename __rebind_va::pointer pointer;
135 typedef typename __rebind_va::const_pointer const_pointer;
136 typedef typename __rebind_va::reference reference;
137 typedef typename __rebind_va::const_reference const_reference;
146 template<
typename Key,
typename Mapped,
typename _Alloc>
150 typedef typename _Alloc::size_type size_type;
153 typedef typename _Alloc::template rebind<Mapped> __rebind_m;
154 typedef typename __rebind_m::other __rebind_ma;
156 typedef typename _Alloc::template rebind<__value_type> __rebind_v;
157 typedef typename __rebind_v::other __rebind_va;
160 typedef typename __rebind_ma::value_type mapped_type;
161 typedef typename __rebind_ma::pointer mapped_pointer;
162 typedef typename __rebind_ma::const_pointer mapped_const_pointer;
163 typedef typename __rebind_ma::reference mapped_reference;
164 typedef typename __rebind_ma::const_reference mapped_const_reference;
166 typedef typename __rebind_va::value_type value_type;
167 typedef typename __rebind_va::pointer pointer;
168 typedef typename __rebind_va::const_pointer const_pointer;
169 typedef typename __rebind_va::reference reference;
170 typedef typename __rebind_va::const_reference const_reference;
180 template<
typename Key,
typename _Alloc>
184 typedef typename _Alloc::size_type size_type;
185 typedef Key value_type;
188 typedef typename _Alloc::template rebind<null_type> __rebind_m;
189 typedef typename __rebind_m::other __rebind_ma;
190 typedef typename _Alloc::template rebind<value_type> __rebind_v;
191 typedef typename __rebind_v::other __rebind_va;
194 typedef typename __rebind_ma::value_type mapped_type;
195 typedef typename __rebind_ma::pointer mapped_pointer;
196 typedef typename __rebind_ma::const_pointer mapped_const_pointer;
197 typedef typename __rebind_ma::reference mapped_reference;
198 typedef typename __rebind_ma::const_reference mapped_const_reference;
200 typedef typename __rebind_va::pointer pointer;
201 typedef typename __rebind_va::const_pointer const_pointer;
202 typedef typename __rebind_va::reference reference;
203 typedef typename __rebind_va::const_reference const_reference;
210 template<
typename Key,
typename _Alloc>
219 template<
typename Key,
typename _Alloc>
223 typedef typename _Alloc::size_type size_type;
224 typedef Key value_type;
227 typedef typename _Alloc::template rebind<null_type> __rebind_m;
228 typedef typename __rebind_m::other __rebind_ma;
229 typedef typename _Alloc::template rebind<value_type> __rebind_v;
230 typedef typename __rebind_v::other __rebind_va;
233 typedef typename __rebind_ma::value_type mapped_type;
234 typedef typename __rebind_ma::pointer mapped_pointer;
235 typedef typename __rebind_ma::const_pointer mapped_const_pointer;
236 typedef typename __rebind_ma::reference mapped_reference;
237 typedef typename __rebind_ma::const_reference mapped_const_reference;
239 typedef typename __rebind_va::pointer pointer;
240 typedef typename __rebind_va::const_pointer const_pointer;
241 typedef typename __rebind_va::reference reference;
242 typedef typename __rebind_va::const_reference const_reference;
249 template<
typename Key,
typename _Alloc>
255 template<
typename Key,
typename Mapped,
typename _Alloc,
bool Store_Hash>
262 template<
typename Key,
typename Mapped,
typename _Alloc,
bool Store_Hash>
264 :
public type_dispatch<Key, Mapped, _Alloc, Store_Hash>::type
268 typedef typename _Alloc::template rebind<Key>::other __rebind_a;
271 typedef typename _Alloc::size_type size_type;
272 typedef typename __rebind_a::value_type key_type;
273 typedef typename __rebind_a::pointer key_pointer;
274 typedef typename __rebind_a::const_pointer key_const_pointer;
275 typedef typename __rebind_a::reference key_reference;
276 typedef typename __rebind_a::const_reference key_const_reference;
278 typedef integral_constant<int, Store_Hash> store_extra;
279 typedef typename __nothrowcopy::indicator no_throw_indicator;
281 store_extra m_store_extra_indicator;
282 no_throw_indicator m_no_throw_copies_indicator;
GNU extensions for policy-based data structures for public use.
Traits for abstract types.
Represents no type, or absence of type, for template tricks.
Primary template for representation of stored data. Two types of data can be stored: value and hash...
Struct holding two objects of arbitrary type.