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;
Primary template for representation of stored data. Two types of data can be stored: value and hash.
Struct holding two objects of arbitrary type.
Traits for abstract types.
GNU extensions for policy-based data structures for public use.
Represents no type, or absence of type, for template tricks.