Mercurial > hg > vamp-build-and-test
comparison DEPENDENCIES/generic/include/boost/intrusive/bs_set.hpp @ 101:c530137014c0
Update Boost headers (1.58.0)
author | Chris Cannam |
---|---|
date | Mon, 07 Sep 2015 11:12:49 +0100 |
parents | 2665513ce2d3 |
children |
comparison
equal
deleted
inserted
replaced
100:793467b5e61c | 101:c530137014c0 |
---|---|
1 ///////////////////////////////////////////////////////////////////////////// | 1 ///////////////////////////////////////////////////////////////////////////// |
2 // | 2 // |
3 // (C) Copyright Ion Gaztanaga 2013-2013 | 3 // (C) Copyright Ion Gaztanaga 2013-2014 |
4 // | 4 // |
5 // Distributed under the Boost Software License, Version 1.0. | 5 // Distributed under the Boost Software License, Version 1.0. |
6 // (See accompanying file LICENSE_1_0.txt or copy at | 6 // (See accompanying file LICENSE_1_0.txt or copy at |
7 // http://www.boost.org/LICENSE_1_0.txt) | 7 // http://www.boost.org/LICENSE_1_0.txt) |
8 // | 8 // |
14 | 14 |
15 #include <boost/intrusive/detail/config_begin.hpp> | 15 #include <boost/intrusive/detail/config_begin.hpp> |
16 #include <boost/intrusive/intrusive_fwd.hpp> | 16 #include <boost/intrusive/intrusive_fwd.hpp> |
17 #include <boost/intrusive/detail/mpl.hpp> | 17 #include <boost/intrusive/detail/mpl.hpp> |
18 #include <boost/intrusive/bstree.hpp> | 18 #include <boost/intrusive/bstree.hpp> |
19 #include <iterator> | 19 #include <boost/move/utility_core.hpp> |
20 #include <boost/move/move.hpp> | 20 #include <boost/static_assert.hpp> |
21 | |
22 #if defined(BOOST_HAS_PRAGMA_ONCE) | |
23 # pragma once | |
24 #endif | |
21 | 25 |
22 namespace boost { | 26 namespace boost { |
23 namespace intrusive { | 27 namespace intrusive { |
24 | 28 |
25 //! The class template bs_set is an intrusive container, that mimics most of | 29 //! The class template bs_set is an intrusive container, that mimics most of |
34 //! \c constant_time_size<>, \c size_type<> and | 38 //! \c constant_time_size<>, \c size_type<> and |
35 //! \c compare<>. | 39 //! \c compare<>. |
36 #if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) | 40 #if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) |
37 template<class T, class ...Options> | 41 template<class T, class ...Options> |
38 #else | 42 #else |
39 template<class ValueTraits, class Compare, class SizeType, bool ConstantTimeSize> | 43 template<class ValueTraits, class Compare, class SizeType, bool ConstantTimeSize, typename HeaderHolder> |
40 #endif | 44 #endif |
41 class bs_set_impl | 45 class bs_set_impl |
42 #ifndef BOOST_INTRUSIVE_DOXYGEN_INVOKED | 46 #ifndef BOOST_INTRUSIVE_DOXYGEN_INVOKED |
43 : public bstree_impl<ValueTraits, Compare, SizeType, ConstantTimeSize, BsTreeAlgorithms> | 47 : public bstree_impl<ValueTraits, Compare, SizeType, ConstantTimeSize, BsTreeAlgorithms, HeaderHolder> |
44 #endif | 48 #endif |
45 { | 49 { |
46 /// @cond | 50 /// @cond |
47 typedef bstree_impl<ValueTraits, Compare, SizeType, ConstantTimeSize, BsTreeAlgorithms> tree_type; | 51 typedef bstree_impl<ValueTraits, Compare, SizeType, ConstantTimeSize, BsTreeAlgorithms, HeaderHolder> tree_type; |
48 BOOST_MOVABLE_BUT_NOT_COPYABLE(bs_set_impl) | 52 BOOST_MOVABLE_BUT_NOT_COPYABLE(bs_set_impl) |
49 | 53 |
50 typedef tree_type implementation_defined; | 54 typedef tree_type implementation_defined; |
51 /// @endcond | 55 /// @endcond |
52 | 56 |
89 : tree_type(true, b, e, cmp, v_traits) | 93 : tree_type(true, b, e, cmp, v_traits) |
90 {} | 94 {} |
91 | 95 |
92 //! @copydoc ::boost::intrusive::bstree::bstree(bstree &&) | 96 //! @copydoc ::boost::intrusive::bstree::bstree(bstree &&) |
93 bs_set_impl(BOOST_RV_REF(bs_set_impl) x) | 97 bs_set_impl(BOOST_RV_REF(bs_set_impl) x) |
94 : tree_type(::boost::move(static_cast<tree_type&>(x))) | 98 : tree_type(BOOST_MOVE_BASE(tree_type, x)) |
95 {} | 99 {} |
96 | 100 |
97 //! @copydoc ::boost::intrusive::bstree::operator=(bstree &&) | 101 //! @copydoc ::boost::intrusive::bstree::operator=(bstree &&) |
98 bs_set_impl& operator=(BOOST_RV_REF(bs_set_impl) x) | 102 bs_set_impl& operator=(BOOST_RV_REF(bs_set_impl) x) |
99 { return static_cast<bs_set_impl&>(tree_type::operator=(::boost::move(static_cast<tree_type&>(x)))); } | 103 { return static_cast<bs_set_impl&>(tree_type::operator=(BOOST_MOVE_BASE(tree_type, x))); } |
100 | 104 |
101 #ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED | 105 #ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED |
102 //! @copydoc ::boost::intrusive::bstree::~bstree() | 106 //! @copydoc ::boost::intrusive::bstree::~bstree() |
103 ~bs_set_impl(); | 107 ~bs_set_impl(); |
104 | 108 |
166 void swap(bs_set_impl& other); | 170 void swap(bs_set_impl& other); |
167 | 171 |
168 //! @copydoc ::boost::intrusive::bstree::clone_from | 172 //! @copydoc ::boost::intrusive::bstree::clone_from |
169 template <class Cloner, class Disposer> | 173 template <class Cloner, class Disposer> |
170 void clone_from(const bs_set_impl &src, Cloner cloner, Disposer disposer); | 174 void clone_from(const bs_set_impl &src, Cloner cloner, Disposer disposer); |
171 | 175 |
172 #endif //#ifdef BOOST_iNTRUSIVE_DOXYGEN_INVOKED | 176 #endif //#ifdef BOOST_iNTRUSIVE_DOXYGEN_INVOKED |
173 | 177 |
174 //! @copydoc ::boost::intrusive::bstree::insert_unique(reference) | 178 //! @copydoc ::boost::intrusive::bstree::insert_unique(reference) |
175 std::pair<iterator, bool> insert(reference value) | 179 std::pair<iterator, bool> insert(reference value) |
176 { return tree_type::insert_unique(value); } | 180 { return tree_type::insert_unique(value); } |
245 | 249 |
246 //! @copydoc ::boost::intrusive::bstree::clear_and_dispose | 250 //! @copydoc ::boost::intrusive::bstree::clear_and_dispose |
247 template<class Disposer> | 251 template<class Disposer> |
248 void clear_and_dispose(Disposer disposer); | 252 void clear_and_dispose(Disposer disposer); |
249 | 253 |
254 #endif // #ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED | |
255 | |
250 //! @copydoc ::boost::intrusive::bstree::count(const_reference)const | 256 //! @copydoc ::boost::intrusive::bstree::count(const_reference)const |
251 size_type count(const_reference value) const; | 257 size_type count(const_reference value) const |
258 { return static_cast<size_type>(this->tree_type::find(value) == this->tree_type::cend()); } | |
252 | 259 |
253 //! @copydoc ::boost::intrusive::bstree::count(const KeyType&,KeyValueCompare)const | 260 //! @copydoc ::boost::intrusive::bstree::count(const KeyType&,KeyValueCompare)const |
254 template<class KeyType, class KeyValueCompare> | 261 template<class KeyType, class KeyValueCompare> |
255 size_type count(const KeyType& key, KeyValueCompare comp) const; | 262 size_type count(const KeyType& key, KeyValueCompare comp) const |
256 | 263 { return static_cast<size_type>(this->tree_type::find(key, comp) == this->tree_type::cend()); } |
264 | |
265 #ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED | |
266 | |
257 //! @copydoc ::boost::intrusive::bstree::lower_bound(const_reference) | 267 //! @copydoc ::boost::intrusive::bstree::lower_bound(const_reference) |
258 iterator lower_bound(const_reference value); | 268 iterator lower_bound(const_reference value); |
259 | 269 |
260 //! @copydoc ::boost::intrusive::bstree::lower_bound(const KeyType&,KeyValueCompare) | 270 //! @copydoc ::boost::intrusive::bstree::lower_bound(const KeyType&,KeyValueCompare) |
261 template<class KeyType, class KeyValueCompare> | 271 template<class KeyType, class KeyValueCompare> |
262 iterator lower_bound(const KeyType& key, KeyValueCompare comp); | 272 iterator lower_bound(const KeyType& key, KeyValueCompare comp); |
263 | 273 |
264 //! @copydoc ::boost::intrusive::bstree::lower_bound(const_reference)const | 274 //! @copydoc ::boost::intrusive::bstree::lower_bound(const_reference)const |
294 | 304 |
295 //! @copydoc ::boost::intrusive::bstree::find(const KeyType&,KeyValueCompare)const | 305 //! @copydoc ::boost::intrusive::bstree::find(const KeyType&,KeyValueCompare)const |
296 template<class KeyType, class KeyValueCompare> | 306 template<class KeyType, class KeyValueCompare> |
297 const_iterator find(const KeyType& key, KeyValueCompare comp) const; | 307 const_iterator find(const KeyType& key, KeyValueCompare comp) const; |
298 | 308 |
299 //! @copydoc ::boost::intrusive::bstree::equal_range(const_reference) | 309 #endif // #ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED |
300 std::pair<iterator,iterator> equal_range(const_reference value); | 310 |
301 | 311 //! @copydoc ::boost::intrusive::rbtree::equal_range(const_reference) |
302 //! @copydoc ::boost::intrusive::bstree::equal_range(const KeyType&,KeyValueCompare) | 312 std::pair<iterator,iterator> equal_range(const_reference value) |
303 template<class KeyType, class KeyValueCompare> | 313 { return this->tree_type::lower_bound_range(value); } |
304 std::pair<iterator,iterator> equal_range(const KeyType& key, KeyValueCompare comp); | 314 |
305 | 315 //! @copydoc ::boost::intrusive::rbtree::equal_range(const KeyType&,KeyValueCompare) |
306 //! @copydoc ::boost::intrusive::bstree::equal_range(const_reference)const | 316 template<class KeyType, class KeyValueCompare> |
317 std::pair<iterator,iterator> equal_range(const KeyType& key, KeyValueCompare comp) | |
318 { return this->tree_type::lower_bound_range(key, comp); } | |
319 | |
320 //! @copydoc ::boost::intrusive::rbtree::equal_range(const_reference)const | |
307 std::pair<const_iterator, const_iterator> | 321 std::pair<const_iterator, const_iterator> |
308 equal_range(const_reference value) const; | 322 equal_range(const_reference value) const |
309 | 323 { return this->tree_type::lower_bound_range(value); } |
310 //! @copydoc ::boost::intrusive::bstree::equal_range(const KeyType&,KeyValueCompare)const | 324 |
325 //! @copydoc ::boost::intrusive::rbtree::equal_range(const KeyType&,KeyValueCompare)const | |
311 template<class KeyType, class KeyValueCompare> | 326 template<class KeyType, class KeyValueCompare> |
312 std::pair<const_iterator, const_iterator> | 327 std::pair<const_iterator, const_iterator> |
313 equal_range(const KeyType& key, KeyValueCompare comp) const; | 328 equal_range(const KeyType& key, KeyValueCompare comp) const |
329 { return this->tree_type::lower_bound_range(key, comp); } | |
330 | |
331 #ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED | |
314 | 332 |
315 //! @copydoc ::boost::intrusive::bstree::bounded_range(const_reference,const_reference,bool,bool) | 333 //! @copydoc ::boost::intrusive::bstree::bounded_range(const_reference,const_reference,bool,bool) |
316 std::pair<iterator,iterator> bounded_range | 334 std::pair<iterator,iterator> bounded_range |
317 (const_reference lower_value, const_reference upper_value, bool left_closed, bool right_closed); | 335 (const_reference lower_value, const_reference upper_value, bool left_closed, bool right_closed); |
318 | 336 |
379 //! same options (either explicitly or implicitly) are used. | 397 //! same options (either explicitly or implicitly) are used. |
380 #if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) || defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) | 398 #if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) || defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) |
381 template<class T, class ...Options> | 399 template<class T, class ...Options> |
382 #else | 400 #else |
383 template<class T, class O1 = void, class O2 = void | 401 template<class T, class O1 = void, class O2 = void |
384 , class O3 = void, class O4 = void> | 402 , class O3 = void, class O4 = void |
403 , class O5 = void> | |
385 #endif | 404 #endif |
386 struct make_bs_set | 405 struct make_bs_set |
387 { | 406 { |
388 /// @cond | 407 /// @cond |
389 typedef typename pack_options | 408 typedef typename pack_options |
390 < bstree_defaults, | 409 < bstree_defaults, |
391 #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) | 410 #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) |
392 O1, O2, O3, O4 | 411 O1, O2, O3, O4, O5 |
393 #else | 412 #else |
394 Options... | 413 Options... |
395 #endif | 414 #endif |
396 >::type packed_options; | 415 >::type packed_options; |
397 | 416 |
401 typedef bs_set_impl | 420 typedef bs_set_impl |
402 < value_traits | 421 < value_traits |
403 , typename packed_options::compare | 422 , typename packed_options::compare |
404 , typename packed_options::size_type | 423 , typename packed_options::size_type |
405 , packed_options::constant_time_size | 424 , packed_options::constant_time_size |
425 , typename packed_options::header_holder_type | |
406 > implementation_defined; | 426 > implementation_defined; |
407 /// @endcond | 427 /// @endcond |
408 typedef implementation_defined type; | 428 typedef implementation_defined type; |
409 }; | 429 }; |
410 | 430 |
411 #ifndef BOOST_INTRUSIVE_DOXYGEN_INVOKED | 431 #ifndef BOOST_INTRUSIVE_DOXYGEN_INVOKED |
412 #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) | 432 #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) |
413 template<class T, class O1, class O2, class O3, class O4> | 433 template<class T, class O1, class O2, class O3, class O4, class O5> |
414 #else | 434 #else |
415 template<class T, class ...Options> | 435 template<class T, class ...Options> |
416 #endif | 436 #endif |
417 class bs_set | 437 class bs_set |
418 : public make_bs_set<T, | 438 : public make_bs_set<T, |
419 #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) | 439 #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) |
420 O1, O2, O3, O4 | 440 O1, O2, O3, O4, O5 |
421 #else | 441 #else |
422 Options... | 442 Options... |
423 #endif | 443 #endif |
424 >::type | 444 >::type |
425 { | 445 { |
426 typedef typename make_bs_set | 446 typedef typename make_bs_set |
427 <T, | 447 <T, |
428 #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) | 448 #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) |
429 O1, O2, O3, O4 | 449 O1, O2, O3, O4, O5 |
430 #else | 450 #else |
431 Options... | 451 Options... |
432 #endif | 452 #endif |
433 >::type Base; | 453 >::type Base; |
434 | 454 |
453 , const value_traits &v_traits = value_traits()) | 473 , const value_traits &v_traits = value_traits()) |
454 : Base(b, e, cmp, v_traits) | 474 : Base(b, e, cmp, v_traits) |
455 {} | 475 {} |
456 | 476 |
457 bs_set(BOOST_RV_REF(bs_set) x) | 477 bs_set(BOOST_RV_REF(bs_set) x) |
458 : Base(::boost::move(static_cast<Base&>(x))) | 478 : Base(BOOST_MOVE_BASE(Base, x)) |
459 {} | 479 {} |
460 | 480 |
461 bs_set& operator=(BOOST_RV_REF(bs_set) x) | 481 bs_set& operator=(BOOST_RV_REF(bs_set) x) |
462 { return static_cast<bs_set &>(this->Base::operator=(::boost::move(static_cast<Base&>(x)))); } | 482 { return static_cast<bs_set &>(this->Base::operator=(BOOST_MOVE_BASE(Base, x))); } |
463 | 483 |
464 static bs_set &container_from_end_iterator(iterator end_iterator) | 484 static bs_set &container_from_end_iterator(iterator end_iterator) |
465 { return static_cast<bs_set &>(Base::container_from_end_iterator(end_iterator)); } | 485 { return static_cast<bs_set &>(Base::container_from_end_iterator(end_iterator)); } |
466 | 486 |
467 static const bs_set &container_from_end_iterator(const_iterator end_iterator) | 487 static const bs_set &container_from_end_iterator(const_iterator end_iterator) |
488 //! \c constant_time_size<>, \c size_type<> and | 508 //! \c constant_time_size<>, \c size_type<> and |
489 //! \c compare<>. | 509 //! \c compare<>. |
490 #if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) | 510 #if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) |
491 template<class T, class ...Options> | 511 template<class T, class ...Options> |
492 #else | 512 #else |
493 template<class ValueTraits, class Compare, class SizeType, bool ConstantTimeSize> | 513 template<class ValueTraits, class Compare, class SizeType, bool ConstantTimeSize, typename HeaderHolder> |
494 #endif | 514 #endif |
495 class bs_multiset_impl | 515 class bs_multiset_impl |
496 #ifndef BOOST_INTRUSIVE_DOXYGEN_INVOKED | 516 #ifndef BOOST_INTRUSIVE_DOXYGEN_INVOKED |
497 : public bstree_impl<ValueTraits, Compare, SizeType, ConstantTimeSize, RbTreeAlgorithms> | 517 : public bstree_impl<ValueTraits, Compare, SizeType, ConstantTimeSize, RbTreeAlgorithms, HeaderHolder> |
498 #endif | 518 #endif |
499 { | 519 { |
500 /// @cond | 520 /// @cond |
501 typedef bstree_impl<ValueTraits, Compare, SizeType, ConstantTimeSize, RbTreeAlgorithms> tree_type; | 521 typedef bstree_impl<ValueTraits, Compare, SizeType, ConstantTimeSize, RbTreeAlgorithms, HeaderHolder> tree_type; |
502 | 522 |
503 BOOST_MOVABLE_BUT_NOT_COPYABLE(bs_multiset_impl) | 523 BOOST_MOVABLE_BUT_NOT_COPYABLE(bs_multiset_impl) |
504 typedef tree_type implementation_defined; | 524 typedef tree_type implementation_defined; |
505 /// @endcond | 525 /// @endcond |
506 | 526 |
543 : tree_type(false, b, e, cmp, v_traits) | 563 : tree_type(false, b, e, cmp, v_traits) |
544 {} | 564 {} |
545 | 565 |
546 //! @copydoc ::boost::intrusive::bstree::bstree(bstree &&) | 566 //! @copydoc ::boost::intrusive::bstree::bstree(bstree &&) |
547 bs_multiset_impl(BOOST_RV_REF(bs_multiset_impl) x) | 567 bs_multiset_impl(BOOST_RV_REF(bs_multiset_impl) x) |
548 : tree_type(::boost::move(static_cast<tree_type&>(x))) | 568 : tree_type(BOOST_MOVE_BASE(tree_type, x)) |
549 {} | 569 {} |
550 | 570 |
551 //! @copydoc ::boost::intrusive::bstree::operator=(bstree &&) | 571 //! @copydoc ::boost::intrusive::bstree::operator=(bstree &&) |
552 bs_multiset_impl& operator=(BOOST_RV_REF(bs_multiset_impl) x) | 572 bs_multiset_impl& operator=(BOOST_RV_REF(bs_multiset_impl) x) |
553 { return static_cast<bs_multiset_impl&>(tree_type::operator=(::boost::move(static_cast<tree_type&>(x)))); } | 573 { return static_cast<bs_multiset_impl&>(tree_type::operator=(BOOST_MOVE_BASE(tree_type, x))); } |
554 | 574 |
555 #ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED | 575 #ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED |
556 //! @copydoc ::boost::intrusive::bstree::~bstree() | 576 //! @copydoc ::boost::intrusive::bstree::~bstree() |
557 ~bs_multiset_impl(); | 577 ~bs_multiset_impl(); |
558 | 578 |
688 size_type count(const_reference value) const; | 708 size_type count(const_reference value) const; |
689 | 709 |
690 //! @copydoc ::boost::intrusive::bstree::count(const KeyType&,KeyValueCompare)const | 710 //! @copydoc ::boost::intrusive::bstree::count(const KeyType&,KeyValueCompare)const |
691 template<class KeyType, class KeyValueCompare> | 711 template<class KeyType, class KeyValueCompare> |
692 size_type count(const KeyType& key, KeyValueCompare comp) const; | 712 size_type count(const KeyType& key, KeyValueCompare comp) const; |
693 | 713 |
694 //! @copydoc ::boost::intrusive::bstree::lower_bound(const_reference) | 714 //! @copydoc ::boost::intrusive::bstree::lower_bound(const_reference) |
695 iterator lower_bound(const_reference value); | 715 iterator lower_bound(const_reference value); |
696 | 716 |
697 //! @copydoc ::boost::intrusive::bstree::lower_bound(const KeyType&,KeyValueCompare) | 717 //! @copydoc ::boost::intrusive::bstree::lower_bound(const KeyType&,KeyValueCompare) |
698 template<class KeyType, class KeyValueCompare> | 718 template<class KeyType, class KeyValueCompare> |
699 iterator lower_bound(const KeyType& key, KeyValueCompare comp); | 719 iterator lower_bound(const KeyType& key, KeyValueCompare comp); |
700 | 720 |
701 //! @copydoc ::boost::intrusive::bstree::lower_bound(const_reference)const | 721 //! @copydoc ::boost::intrusive::bstree::lower_bound(const_reference)const |
816 //! same options (either explicitly or implicitly) are used. | 836 //! same options (either explicitly or implicitly) are used. |
817 #if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) || defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) | 837 #if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) || defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) |
818 template<class T, class ...Options> | 838 template<class T, class ...Options> |
819 #else | 839 #else |
820 template<class T, class O1 = void, class O2 = void | 840 template<class T, class O1 = void, class O2 = void |
821 , class O3 = void, class O4 = void> | 841 , class O3 = void, class O4 = void |
842 , class O5 = void> | |
822 #endif | 843 #endif |
823 struct make_bs_multiset | 844 struct make_bs_multiset |
824 { | 845 { |
825 /// @cond | 846 /// @cond |
826 typedef typename pack_options | 847 typedef typename pack_options |
827 < bstree_defaults, | 848 < bstree_defaults, |
828 #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) | 849 #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) |
829 O1, O2, O3, O4 | 850 O1, O2, O3, O4, O5 |
830 #else | 851 #else |
831 Options... | 852 Options... |
832 #endif | 853 #endif |
833 >::type packed_options; | 854 >::type packed_options; |
834 | 855 |
838 typedef bs_multiset_impl | 859 typedef bs_multiset_impl |
839 < value_traits | 860 < value_traits |
840 , typename packed_options::compare | 861 , typename packed_options::compare |
841 , typename packed_options::size_type | 862 , typename packed_options::size_type |
842 , packed_options::constant_time_size | 863 , packed_options::constant_time_size |
864 , typename packed_options::header_holder_type | |
843 > implementation_defined; | 865 > implementation_defined; |
844 /// @endcond | 866 /// @endcond |
845 typedef implementation_defined type; | 867 typedef implementation_defined type; |
846 }; | 868 }; |
847 | 869 |
848 #ifndef BOOST_INTRUSIVE_DOXYGEN_INVOKED | 870 #ifndef BOOST_INTRUSIVE_DOXYGEN_INVOKED |
849 | 871 |
850 #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) | 872 #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) |
851 template<class T, class O1, class O2, class O3, class O4> | 873 template<class T, class O1, class O2, class O3, class O4, class O5> |
852 #else | 874 #else |
853 template<class T, class ...Options> | 875 template<class T, class ...Options> |
854 #endif | 876 #endif |
855 class bs_multiset | 877 class bs_multiset |
856 : public make_bs_multiset<T, | 878 : public make_bs_multiset<T, |
857 #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) | 879 #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) |
858 O1, O2, O3, O4 | 880 O1, O2, O3, O4, O5 |
859 #else | 881 #else |
860 Options... | 882 Options... |
861 #endif | 883 #endif |
862 >::type | 884 >::type |
863 { | 885 { |
864 typedef typename make_bs_multiset<T, | 886 typedef typename make_bs_multiset<T, |
865 #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) | 887 #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) |
866 O1, O2, O3, O4 | 888 O1, O2, O3, O4, O5 |
867 #else | 889 #else |
868 Options... | 890 Options... |
869 #endif | 891 #endif |
870 >::type Base; | 892 >::type Base; |
871 | 893 |
891 , const value_traits &v_traits = value_traits()) | 913 , const value_traits &v_traits = value_traits()) |
892 : Base(b, e, cmp, v_traits) | 914 : Base(b, e, cmp, v_traits) |
893 {} | 915 {} |
894 | 916 |
895 bs_multiset(BOOST_RV_REF(bs_multiset) x) | 917 bs_multiset(BOOST_RV_REF(bs_multiset) x) |
896 : Base(::boost::move(static_cast<Base&>(x))) | 918 : Base(BOOST_MOVE_BASE(Base, x)) |
897 {} | 919 {} |
898 | 920 |
899 bs_multiset& operator=(BOOST_RV_REF(bs_multiset) x) | 921 bs_multiset& operator=(BOOST_RV_REF(bs_multiset) x) |
900 { return static_cast<bs_multiset &>(this->Base::operator=(::boost::move(static_cast<Base&>(x)))); } | 922 { return static_cast<bs_multiset &>(this->Base::operator=(BOOST_MOVE_BASE(Base, x))); } |
901 | 923 |
902 static bs_multiset &container_from_end_iterator(iterator end_iterator) | 924 static bs_multiset &container_from_end_iterator(iterator end_iterator) |
903 { return static_cast<bs_multiset &>(Base::container_from_end_iterator(end_iterator)); } | 925 { return static_cast<bs_multiset &>(Base::container_from_end_iterator(end_iterator)); } |
904 | 926 |
905 static const bs_multiset &container_from_end_iterator(const_iterator end_iterator) | 927 static const bs_multiset &container_from_end_iterator(const_iterator end_iterator) |