28 #ifndef _GLIBCXX_PROFILE_UNORDERED_SET
29 #define _GLIBCXX_PROFILE_UNORDERED_SET 1
31 #if __cplusplus < 201103L
39 #define _GLIBCXX_BASE unordered_set<_Key, _Hash, _Pred, _Alloc>
40 #define _GLIBCXX_STD_BASE _GLIBCXX_STD_C::_GLIBCXX_BASE
42 namespace std _GLIBCXX_VISIBILITY(default)
47 template<
typename _Key,
52 :
public _GLIBCXX_STD_BASE,
53 public _Unordered_profile<unordered_set<_Key, _Hash, _Pred, _Alloc>,
56 typedef _GLIBCXX_STD_BASE
_Base;
59 _M_base() noexcept {
return *
this; }
62 _M_base()
const noexcept {
return *
this; }
65 typedef typename _Base::size_type size_type;
66 typedef typename _Base::hasher hasher;
67 typedef typename _Base::key_equal key_equal;
68 typedef typename _Base::allocator_type allocator_type;
69 typedef typename _Base::key_type key_type;
70 typedef typename _Base::value_type value_type;
71 typedef typename _Base::difference_type difference_type;
72 typedef typename _Base::reference reference;
73 typedef typename _Base::const_reference const_reference;
75 typedef typename _Base::iterator iterator;
76 typedef typename _Base::const_iterator const_iterator;
82 const hasher& __hf = hasher(),
83 const key_equal& __eql = key_equal(),
84 const allocator_type& __a = allocator_type())
85 :
_Base(__n, __hf, __eql, __a)
88 template<
typename _InputIterator>
91 const hasher& __hf = hasher(),
92 const key_equal& __eql = key_equal(),
93 const allocator_type& __a = allocator_type())
94 :
_Base(__f, __l, __n, __hf, __eql, __a)
111 const allocator_type& __a)
112 :
_Base(__uset._M_base(), __a)
116 const allocator_type& __a)
117 :
_Base(std::move(__uset._M_base()), __a)
122 const hasher& __hf = hasher(),
123 const key_equal& __eql = key_equal(),
124 const allocator_type& __a = allocator_type())
125 :
_Base(__l, __n, __hf, __eql, __a)
133 const allocator_type& __a)
137 template<
typename _InputIterator>
140 const allocator_type& __a)
141 :
unordered_set(__first, __last, __n, hasher(), key_equal(), __a)
144 template<
typename _InputIterator>
146 size_type __n,
const hasher& __hf,
147 const allocator_type& __a)
148 :
unordered_set(__first, __last, __n, __hf, key_equal(), __a)
153 const allocator_type& __a)
158 size_type __n,
const hasher& __hf,
159 const allocator_type& __a)
172 this->_M_profile_destruct();
174 this->_M_profile_construct();
180 noexcept( noexcept(__x._M_base().swap(__x)) )
189 this->_M_profile_destruct();
191 this->_M_profile_construct();
194 template<
typename... _Args>
196 emplace(_Args&&... __args)
198 size_type __old_size = _Base::bucket_count();
200 = _Base::emplace(std::forward<_Args>(__args)...);
201 this->_M_profile_resize(__old_size);
205 template<
typename... _Args>
207 emplace_hint(const_iterator __it, _Args&&... __args)
209 size_type __old_size = _Base::bucket_count();
211 = _Base::emplace_hint(__it, std::forward<_Args>(__args)...);
212 this->_M_profile_resize(__old_size);
219 size_type __old_size = _Base::bucket_count();
221 this->_M_profile_resize(__old_size);
225 insert(
const value_type& __obj)
227 size_type __old_size = _Base::bucket_count();
229 this->_M_profile_resize(__old_size);
234 insert(const_iterator __iter,
const value_type& __v)
236 size_type __old_size = _Base::bucket_count();
237 iterator __res = _Base::insert(__iter, __v);
238 this->_M_profile_resize(__old_size);
243 insert(value_type&& __obj)
245 size_type __old_size = _Base::bucket_count();
247 this->_M_profile_resize(__old_size);
252 insert(const_iterator __iter, value_type&& __v)
254 size_type __old_size = _Base::bucket_count();
255 iterator __res = _Base::insert(__iter, std::move(__v));
256 this->_M_profile_resize(__old_size);
260 template<
typename _InputIter>
262 insert(_InputIter __first, _InputIter __last)
264 size_type __old_size = _Base::bucket_count();
265 _Base::insert(__first, __last);
266 this->_M_profile_resize(__old_size);
270 rehash(size_type __n)
272 size_type __old_size = _Base::bucket_count();
274 this->_M_profile_resize(__old_size);
278 template<
typename _Key,
typename _Hash,
typename _Pred,
typename _Alloc>
284 template<
typename _Key,
typename _Hash,
typename _Pred,
typename _Alloc>
288 {
return static_cast<const _GLIBCXX_STD_BASE&
>(__x) == __y; }
290 template<
typename _Key,
typename _Hash,
typename _Pred,
typename _Alloc>
292 operator!=(
const unordered_set<_Key, _Hash, _Pred, _Alloc>& __x,
293 const unordered_set<_Key, _Hash, _Pred, _Alloc>& __y)
294 {
return !(__x == __y); }
297 #undef _GLIBCXX_STD_BASE
298 #define _GLIBCXX_STD_BASE _GLIBCXX_STD_C::_GLIBCXX_BASE
299 #define _GLIBCXX_BASE unordered_multiset<_Value, _Hash, _Pred, _Alloc>
302 template<
typename _Value,
307 :
public _GLIBCXX_STD_BASE,
308 public _Unordered_profile<unordered_multiset<_Value,
309 _Hash, _Pred, _Alloc>,
312 typedef _GLIBCXX_STD_BASE
_Base;
315 _M_base() noexcept {
return *
this; }
318 _M_base()
const noexcept {
return *
this; }
321 typedef typename _Base::size_type size_type;
322 typedef typename _Base::hasher hasher;
323 typedef typename _Base::key_equal key_equal;
324 typedef typename _Base::allocator_type allocator_type;
325 typedef typename _Base::key_type key_type;
326 typedef typename _Base::value_type value_type;
327 typedef typename _Base::difference_type difference_type;
328 typedef typename _Base::reference reference;
329 typedef typename _Base::const_reference const_reference;
331 typedef typename _Base::iterator iterator;
332 typedef typename _Base::const_iterator const_iterator;
338 const hasher& __hf = hasher(),
339 const key_equal& __eql = key_equal(),
340 const allocator_type& __a = allocator_type())
341 :
_Base(__n, __hf, __eql, __a)
344 template<
typename _InputIterator>
347 const hasher& __hf = hasher(),
348 const key_equal& __eql = key_equal(),
349 const allocator_type& __a = allocator_type())
350 :
_Base(__f, __l, __n, __hf, __eql, __a)
367 const allocator_type& __a)
368 :
_Base(__umset._M_base(), __a)
372 const allocator_type& __a)
373 :
_Base(std::move(__umset._M_base()), __a)
378 const hasher& __hf = hasher(),
379 const key_equal& __eql = key_equal(),
380 const allocator_type& __a = allocator_type())
381 :
_Base(__l, __n, __hf, __eql, __a)
389 const allocator_type& __a)
393 template<
typename _InputIterator>
396 const allocator_type& __a)
400 template<
typename _InputIterator>
402 size_type __n,
const hasher& __hf,
403 const allocator_type& __a)
409 const allocator_type& __a)
414 size_type __n,
const hasher& __hf,
415 const allocator_type& __a)
428 this->_M_profile_destruct();
430 this->_M_profile_construct();
436 noexcept( noexcept(__x._M_base().swap(__x)) )
445 this->_M_profile_destruct();
447 this->_M_profile_construct();
450 template<
typename... _Args>
452 emplace(_Args&&... __args)
454 size_type __old_size = _Base::bucket_count();
455 iterator __res = _Base::emplace(std::forward<_Args>(__args)...);
456 this->_M_profile_resize(__old_size);
460 template<
typename... _Args>
462 emplace_hint(const_iterator __it, _Args&&... __args)
464 size_type __old_size = _Base::bucket_count();
466 = _Base::emplace_hint(__it, std::forward<_Args>(__args)...);
467 this->_M_profile_resize(__old_size);
474 size_type __old_size = _Base::bucket_count();
476 this->_M_profile_resize(__old_size);
480 insert(
const value_type& __obj)
482 size_type __old_size = _Base::bucket_count();
483 iterator __res = _Base::insert(__obj);
484 this->_M_profile_resize(__old_size);
489 insert(const_iterator __iter,
const value_type& __v)
491 size_type __old_size = _Base::bucket_count();
492 iterator __res = _Base::insert(__iter, __v);
493 this->_M_profile_resize(__old_size);
498 insert(value_type&& __obj)
500 size_type __old_size = _Base::bucket_count();
501 iterator __res = _Base::insert(std::move(__obj));
502 this->_M_profile_resize(__old_size);
507 insert(const_iterator __iter, value_type&& __v)
509 size_type __old_size = _Base::bucket_count();
510 iterator __res = _Base::insert(__iter, std::move(__v));
511 this->_M_profile_resize(__old_size);
515 template<
typename _InputIter>
517 insert(_InputIter __first, _InputIter __last)
519 size_type __old_size = _Base::bucket_count();
520 _Base::insert(__first, __last);
521 this->_M_profile_resize(__old_size);
525 rehash(size_type __n)
527 size_type __old_size = _Base::bucket_count();
529 this->_M_profile_resize(__old_size);
533 template<
typename _Value,
typename _Hash,
typename _Pred,
typename _Alloc>
539 template<
typename _Value,
typename _Hash,
typename _Pred,
typename _Alloc>
543 {
return static_cast<const _GLIBCXX_STD_BASE&
>(__x) == __y; }
545 template<
typename _Value,
typename _Hash,
typename _Pred,
typename _Alloc>
547 operator!=(
const unordered_multiset<_Value, _Hash, _Pred, _Alloc>& __x,
548 const unordered_multiset<_Value, _Hash, _Pred, _Alloc>& __y)
549 {
return !(__x == __y); }
555 #undef _GLIBCXX_STD_BASE
The standard allocator, as per [20.4].
Unordered_set wrapper with performance instrumentation.
A standard container composed of unique keys (containing at most one of each key value) in which the ...
Unordered_multiset wrapper with performance instrumentation.
Primary class template hash.
A standard container composed of equivalent keys (possibly containing multiple of each key value) in ...
Sequential helper functions. This file is a GNU profile extension to the Standard C++ Library...
One of the comparison functors.
void swap(basic_filebuf< _CharT, _Traits > &__x, basic_filebuf< _CharT, _Traits > &__y)
Swap specialization for filebufs.
Struct holding two objects of arbitrary type.