sequenced_index.hpp
Go to the documentation of this file.
1 /* Copyright 2003-2015 Joaquin M Lopez Munoz.
2  * Distributed under the Boost Software License, Version 1.0.
3  * (See accompanying file LICENSE_1_0.txt or copy at
4  * http://www.boost.org/LICENSE_1_0.txt)
5  *
6  * See http://www.boost.org/libs/multi_index for library home page.
7  */
8 
9 #ifndef BOOST_MULTI_INDEX_SEQUENCED_INDEX_HPP
10 #define BOOST_MULTI_INDEX_SEQUENCED_INDEX_HPP
11 
12 #if defined(_MSC_VER)
13 #pragma once
14 #endif
15 
16 #include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */
17 #include <boost/bind.hpp>
18 #include <boost/call_traits.hpp>
22 #include <boost/foreach_fwd.hpp>
24 #include <boost/move/core.hpp>
25 #include <boost/move/utility.hpp>
26 #include <boost/mpl/bool.hpp>
27 #include <boost/mpl/not.hpp>
28 #include <boost/mpl/push_front.hpp>
39 #include <boost/tuple/tuple.hpp>
41 #include <cstddef>
42 #include <functional>
43 #include <utility>
44 
45 #if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST)
46 #include<initializer_list>
47 #endif
48 
49 #if !defined(BOOST_MULTI_INDEX_DISABLE_SERIALIZATION)
50 #include <boost/bind.hpp>
51 #endif
52 
53 #if defined(BOOST_MULTI_INDEX_ENABLE_INVARIANT_CHECKING)
54 #define BOOST_MULTI_INDEX_SEQ_INDEX_CHECK_INVARIANT_OF(x) \
55  detail::scope_guard BOOST_JOIN(check_invariant_,__LINE__)= \
56  detail::make_obj_guard(x,&sequenced_index::check_invariant_); \
57  BOOST_JOIN(check_invariant_,__LINE__).touch();
58 #define BOOST_MULTI_INDEX_SEQ_INDEX_CHECK_INVARIANT \
59  BOOST_MULTI_INDEX_SEQ_INDEX_CHECK_INVARIANT_OF(*this)
60 #else
61 #define BOOST_MULTI_INDEX_SEQ_INDEX_CHECK_INVARIANT_OF(x)
62 #define BOOST_MULTI_INDEX_SEQ_INDEX_CHECK_INVARIANT
63 #endif
64 
65 namespace boost{
66 
67 namespace multi_index{
68 
69 namespace detail{
70 
71 /* sequenced_index adds a layer of sequenced indexing to a given Super */
72 
73 template<typename SuperMeta,typename TagList>
76 
77 #if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
78  ,public safe_mode::safe_container<
79  sequenced_index<SuperMeta,TagList> >
80 #endif
81 
82 {
83 #if defined(BOOST_MULTI_INDEX_ENABLE_INVARIANT_CHECKING)&&\
84  BOOST_WORKAROUND(__MWERKS__,<=0x3003)
85 /* The "ISO C++ Template Parser" option in CW8.3 has a problem with the
86  * lifetime of const references bound to temporaries --precisely what
87  * scopeguards are.
88  */
89 
90 #pragma parse_mfunc_templ off
91 #endif
92 
93  typedef typename SuperMeta::type super;
94 
95 protected:
96  typedef sequenced_index_node<
98 
99 private:
101 
102 public:
103  /* types */
104 
105  typedef typename node_type::value_type value_type;
107  typedef typename super::final_allocator_type allocator_type;
108  typedef typename allocator_type::reference reference;
109  typedef typename allocator_type::const_reference const_reference;
110 
111 #if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
112  typedef safe_mode::safe_iterator<
115 #else
117 #endif
118 
120 
121  typedef std::size_t size_type;
122  typedef std::ptrdiff_t difference_type;
123  typedef typename allocator_type::pointer pointer;
124  typedef typename allocator_type::const_pointer const_pointer;
125  typedef typename
127  typedef typename
129  typedef TagList tag_list;
130 
131 protected:
132  typedef typename super::final_node_type final_node_type;
133  typedef tuples::cons<
134  ctor_args,
135  typename super::ctor_args_list> ctor_args_list;
136  typedef typename mpl::push_front<
137  typename super::index_type_list,
139  typedef typename mpl::push_front<
140  typename super::iterator_type_list,
142  typedef typename mpl::push_front<
143  typename super::const_iterator_type_list,
145  typedef typename super::copy_map_type copy_map_type;
146 
147 #if !defined(BOOST_MULTI_INDEX_DISABLE_SERIALIZATION)
148  typedef typename super::index_saver_type index_saver_type;
149  typedef typename super::index_loader_type index_loader_type;
150 #endif
151 
152 private:
153 #if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
154  typedef safe_mode::safe_container<
155  sequenced_index> safe_super;
156 #endif
157 
159 
160  /* Needed to avoid commas in BOOST_MULTI_INDEX_OVERLOADS_TO_VARTEMPL
161  * expansion.
162  */
163 
164  typedef std::pair<iterator,bool> emplace_return_type;
165 
166 public:
167 
168  /* construct/copy/destroy
169  * Default and copy ctors are in the protected section as indices are
170  * not supposed to be created on their own. No range ctor either.
171  */
172 
175  {
176  this->final()=x.final();
177  return *this;
178  }
179 
180 #if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST)
182  std::initializer_list<value_type> list)
183  {
184  this->final()=list;
185  return *this;
186  }
187 #endif
188 
189  template <class InputIterator>
190  void assign(InputIterator first,InputIterator last)
191  {
193  }
194 
195 #if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST)
196  void assign(std::initializer_list<value_type> list)
197  {
198  assign(list.begin(),list.end());
199  }
200 #endif
201 
203  {
205  clear();
206  for(size_type i=0;i<n;++i)push_back(value);
207  }
208 
210  {
211  return this->final().get_allocator();
212  }
213 
214  /* iterators */
215 
220  iterator
233  cbegin()const BOOST_NOEXCEPT{return begin();}
235  cend()const BOOST_NOEXCEPT{return end();}
237  crbegin()const BOOST_NOEXCEPT{return rbegin();}
239  crend()const BOOST_NOEXCEPT{return rend();}
240 
242  {
243  return make_iterator(node_from_value<node_type>(&x));
244  }
245 
247  {
248  return make_iterator(node_from_value<node_type>(&x));
249  }
250 
251  /* capacity */
252 
253  bool empty()const BOOST_NOEXCEPT{return this->final_empty_();}
254  size_type size()const BOOST_NOEXCEPT{return this->final_size_();}
255  size_type max_size()const BOOST_NOEXCEPT{return this->final_max_size_();}
256 
258  {
260  if(n>size()){
261  for(size_type m=n-size();m--;)
262  this->final_emplace_(BOOST_MULTI_INDEX_NULL_PARAM_PACK);
263  }
264  else if(n<size()){for(size_type m=size()-n;m--;)pop_back();}
265  }
266 
268  {
270  if(n>size())insert(end(),n-size(),x);
271  else if(n<size())for(size_type m=size()-n;m--;)pop_back();
272  }
273 
274  /* access: no non-const versions provided as sequenced_index
275  * handles const elements.
276  */
277 
278  const_reference front()const{return *begin();}
279  const_reference back()const{return *--end();}
280 
281  /* modifiers */
282 
285 
286  std::pair<iterator,bool> push_front(const value_type& x)
287  {return insert(begin(),x);}
288  std::pair<iterator,bool> push_front(BOOST_RV_REF(value_type) x)
289  {return insert(begin(),boost::move(x));}
290  void pop_front(){erase(begin());}
291 
294 
295  std::pair<iterator,bool> push_back(const value_type& x)
296  {return insert(end(),x);}
297  std::pair<iterator,bool> push_back(BOOST_RV_REF(value_type) x)
298  {return insert(end(),boost::move(x));}
299  void pop_back(){erase(--end());}
300 
302  emplace_return_type,emplace,emplace_impl,iterator,position)
303 
304  std::pair<iterator,bool> insert(iterator position,const value_type& x)
305  {
307  BOOST_MULTI_INDEX_CHECK_IS_OWNER(position,*this);
309  std::pair<final_node_type*,bool> p=this->final_insert_(x);
310  if(p.second&&position.get_node()!=header()){
311  relink(position.get_node(),p.first);
312  }
313  return std::pair<iterator,bool>(make_iterator(p.first),p.second);
314  }
315 
316  std::pair<iterator,bool> insert(iterator position,BOOST_RV_REF(value_type) x)
317  {
319  BOOST_MULTI_INDEX_CHECK_IS_OWNER(position,*this);
321  std::pair<final_node_type*,bool> p=this->final_insert_rv_(x);
322  if(p.second&&position.get_node()!=header()){
323  relink(position.get_node(),p.first);
324  }
325  return std::pair<iterator,bool>(make_iterator(p.first),p.second);
326  }
327 
329  {
331  BOOST_MULTI_INDEX_CHECK_IS_OWNER(position,*this);
333  for(size_type i=0;i<n;++i)insert(position,x);
334  }
335 
336  template<typename InputIterator>
337  void insert(iterator position,InputIterator first,InputIterator last)
338  {
339  insert_iter(position,first,last,mpl::not_<is_integral<InputIterator> >());
340  }
341 
342 #if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST)
343  void insert(iterator position,std::initializer_list<value_type> list)
344  {
345  insert(position,list.begin(),list.end());
346  }
347 #endif
348 
350  {
353  BOOST_MULTI_INDEX_CHECK_IS_OWNER(position,*this);
355  this->final_erase_(static_cast<final_node_type*>(position++.get_node()));
356  return position;
357  }
358 
360  {
367  while(first!=last){
368  first=erase(first);
369  }
370  return first;
371  }
372 
373  bool replace(iterator position,const value_type& x)
374  {
377  BOOST_MULTI_INDEX_CHECK_IS_OWNER(position,*this);
379  return this->final_replace_(
380  x,static_cast<final_node_type*>(position.get_node()));
381  }
382 
384  {
387  BOOST_MULTI_INDEX_CHECK_IS_OWNER(position,*this);
389  return this->final_replace_rv_(
390  x,static_cast<final_node_type*>(position.get_node()));
391  }
392 
393  template<typename Modifier>
394  bool modify(iterator position,Modifier mod)
395  {
398  BOOST_MULTI_INDEX_CHECK_IS_OWNER(position,*this);
400 
401 #if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
402  /* MSVC++ 6.0 optimizer on safe mode code chokes if this
403  * this is not added. Left it for all compilers as it does no
404  * harm.
405  */
406 
407  position.detach();
408 #endif
409 
410  return this->final_modify_(
411  mod,static_cast<final_node_type*>(position.get_node()));
412  }
413 
414  template<typename Modifier,typename Rollback>
415  bool modify(iterator position,Modifier mod,Rollback back_)
416  {
419  BOOST_MULTI_INDEX_CHECK_IS_OWNER(position,*this);
421 
422 #if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
423  /* MSVC++ 6.0 optimizer on safe mode code chokes if this
424  * this is not added. Left it for all compilers as it does no
425  * harm.
426  */
427 
428  position.detach();
429 #endif
430 
431  return this->final_modify_(
432  mod,back_,static_cast<final_node_type*>(position.get_node()));
433  }
434 
436  {
439  this->final_swap_(x.final());
440  }
441 
443  {
445  this->final_clear_();
446  }
447 
448  /* list operations */
449 
451  {
453  BOOST_MULTI_INDEX_CHECK_IS_OWNER(position,*this);
456  iterator first=x.begin(),last=x.end();
457  while(first!=last){
458  if(insert(position,*first).second)first=x.erase(first);
459  else ++first;
460  }
461  }
462 
464  {
466  BOOST_MULTI_INDEX_CHECK_IS_OWNER(position,*this);
471  if(&x==this){
472  if(position!=i)relink(position.get_node(),i.get_node());
473  }
474  else{
475  if(insert(position,*i).second){
476 
477 #if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
478  /* MSVC++ 6.0 optimizer has a hard time with safe mode, and the following
479  * workaround is needed. Left it for all compilers as it does no
480  * harm.
481  */
482  i.detach();
483  x.erase(x.make_iterator(i.get_node()));
484 #else
485  x.erase(i);
486 #endif
487 
488  }
489  }
490  }
491 
492  void splice(
494  iterator first,iterator last)
495  {
497  BOOST_MULTI_INDEX_CHECK_IS_OWNER(position,*this);
504  if(&x==this){
505  BOOST_MULTI_INDEX_CHECK_OUTSIDE_RANGE(position,first,last);
506  if(position!=last)relink(
507  position.get_node(),first.get_node(),last.get_node());
508  }
509  else{
510  while(first!=last){
511  if(insert(position,*first).second)first=x.erase(first);
512  else ++first;
513  }
514  }
515  }
516 
518  {
520  *this,
521  ::boost::bind(std::equal_to<value_type>(),::boost::arg<1>(),value));
522  }
523 
524  template<typename Predicate>
525  void remove_if(Predicate pred)
526  {
527  sequenced_index_remove(*this,pred);
528  }
529 
530  void unique()
531  {
532  sequenced_index_unique(*this,std::equal_to<value_type>());
533  }
534 
535  template <class BinaryPredicate>
536  void unique(BinaryPredicate binary_pred)
537  {
538  sequenced_index_unique(*this,binary_pred);
539  }
540 
542  {
543  sequenced_index_merge(*this,x,std::less<value_type>());
544  }
545 
546  template <typename Compare>
548  {
549  sequenced_index_merge(*this,x,comp);
550  }
551 
552  void sort()
553  {
555  sequenced_index_sort(header(),std::less<value_type>());
556  }
557 
558  template <typename Compare>
559  void sort(Compare comp)
560  {
563  }
564 
566  {
568  node_impl_type::reverse(header()->impl());
569  }
570 
571  /* rearrange operations */
572 
573  void relocate(iterator position,iterator i)
574  {
576  BOOST_MULTI_INDEX_CHECK_IS_OWNER(position,*this);
581  if(position!=i)relink(position.get_node(),i.get_node());
582  }
583 
584  void relocate(iterator position,iterator first,iterator last)
585  {
587  BOOST_MULTI_INDEX_CHECK_IS_OWNER(position,*this);
593  BOOST_MULTI_INDEX_CHECK_OUTSIDE_RANGE(position,first,last);
595  if(position!=last)relink(
596  position.get_node(),first.get_node(),last.get_node());
597  }
598 
599  template<typename InputIterator>
600  void rearrange(InputIterator first)
601  {
603  node_type* pos=header();
604  for(size_type s=size();s--;){
605  const value_type& v=*first++;
606  relink(pos,node_from_value<node_type>(&v));
607  }
608  }
609 
612  super(args_list.get_tail(),al)
613  {
615  }
616 
618  super(x)
619 
620 #if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
621  ,safe_super()
622 #endif
623 
624  {
625  /* the actual copying takes place in subsequent call to copy_() */
626  }
627 
631 
632 #if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
633  ,safe_super()
634 #endif
635 
636  {
638  }
639 
641  {
642  /* the container is guaranteed to be empty by now */
643  }
644 
645 #if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
646  iterator make_iterator(node_type* node){return iterator(node,this);}
648  {return const_iterator(node,const_cast<sequenced_index*>(this));}
649 #else
650  iterator make_iterator(node_type* node){return iterator(node);}
652  {return const_iterator(node);}
653 #endif
654 
655  void copy_(
657  {
658  node_type* org=x.header();
659  node_type* cpy=header();
660  do{
661  node_type* next_org=node_type::from_impl(org->next());
662  node_type* next_cpy=map.find(static_cast<final_node_type*>(next_org));
663  cpy->next()=next_cpy->impl();
664  next_cpy->prior()=cpy->impl();
665  org=next_org;
666  cpy=next_cpy;
667  }while(org!=x.header());
668 
669  super::copy_(x,map);
670  }
671 
672  template<typename Variant>
674  value_param_type v,final_node_type*& x,Variant variant)
675  {
676  final_node_type* res=super::insert_(v,x,variant);
677  if(res==x)link(static_cast<node_type*>(x));
678  return res;
679  }
680 
681  template<typename Variant>
683  value_param_type v,node_type* position,final_node_type*& x,Variant variant)
684  {
685  final_node_type* res=super::insert_(v,position,x,variant);
686  if(res==x)link(static_cast<node_type*>(x));
687  return res;
688  }
689 
690  void erase_(node_type* x)
691  {
692  unlink(x);
693  super::erase_(x);
694 
695 #if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
696  detach_iterators(x);
697 #endif
698  }
699 
701  {
702  for(node_type* x=node_type::from_impl(header()->next());x!=header();){
703  node_type* y=node_type::from_impl(x->next());
704  this->final_delete_node_(static_cast<final_node_type*>(x));
705  x=y;
706  }
707  }
708 
709  void clear_()
710  {
711  super::clear_();
713 
714 #if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
715  safe_super::detach_dereferenceable_iterators();
716 #endif
717  }
718 
720  {
721 #if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
722  safe_super::swap(x);
723 #endif
724 
725  super::swap_(x);
726  }
727 
729  {
730 #if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
731  safe_super::swap(x);
732 #endif
733 
734  super::swap_elements_(x);
735  }
736 
737  template<typename Variant>
738  bool replace_(value_param_type v,node_type* x,Variant variant)
739  {
740  return super::replace_(v,x,variant);
741  }
742 
744  {
745  BOOST_TRY{
746  if(!super::modify_(x)){
747  unlink(x);
748 
749 #if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
750  detach_iterators(x);
751 #endif
752 
753  return false;
754  }
755  else return true;
756  }
757  BOOST_CATCH(...){
758  unlink(x);
759 
760 #if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
761  detach_iterators(x);
762 #endif
763 
765  }
767  }
768 
770  {
771  return super::modify_rollback_(x);
772  }
773 
774 #if !defined(BOOST_MULTI_INDEX_DISABLE_SERIALIZATION)
775  /* serialization */
776 
777  template<typename Archive>
778  void save_(
779  Archive& ar,const unsigned int version,const index_saver_type& sm)const
780  {
781  sm.save(begin(),end(),ar,version);
782  super::save_(ar,version,sm);
783  }
784 
785  template<typename Archive>
786  void load_(
787  Archive& ar,const unsigned int version,const index_loader_type& lm)
788  {
789  lm.load(
790  ::boost::bind(
792  ar,version);
793  super::load_(ar,version,lm);
794  }
795 #endif
796 
797 #if defined(BOOST_MULTI_INDEX_ENABLE_INVARIANT_CHECKING)
798  /* invariant stuff */
799 
800  bool invariant_()const
801  {
802  if(size()==0||begin()==end()){
803  if(size()!=0||begin()!=end()||
804  header()->next()!=header()->impl()||
805  header()->prior()!=header()->impl())return false;
806  }
807  else{
808  size_type s=0;
809  for(const_iterator it=begin(),it_end=end();it!=it_end;++it,++s){
810  if(it.get_node()->next()->prior()!=it.get_node()->impl())return false;
811  if(it.get_node()->prior()->next()!=it.get_node()->impl())return false;
812  }
813  if(s!=size())return false;
814  }
815 
816  return super::invariant_();
817  }
818 
819  /* This forwarding function eases things for the boost::mem_fn construct
820  * in BOOST_MULTI_INDEX_SEQ_INDEX_CHECK_INVARIANT. Actually,
821  * final_check_invariant is already an inherited member function of index.
822  */
823  void check_invariant_()const{this->final_check_invariant_();}
824 #endif
825 
826 private:
827  node_type* header()const{return this->final_header();}
828 
830  {
831  header()->prior()=header()->next()=header()->impl();
832  }
833 
834  void link(node_type* x)
835  {
836  node_impl_type::link(x->impl(),header()->impl());
837  };
838 
839  static void unlink(node_type* x)
840  {
842  }
843 
844  static void relink(node_type* position,node_type* x)
845  {
846  node_impl_type::relink(position->impl(),x->impl());
847  }
848 
849  static void relink(node_type* position,node_type* first,node_type* last)
850  {
852  position->impl(),first->impl(),last->impl());
853  }
854 
855 #if !defined(BOOST_MULTI_INDEX_DISABLE_SERIALIZATION)
856  void rearranger(node_type* position,node_type *x)
857  {
858  if(!position)position=header();
859  node_type::increment(position);
860  if(position!=x)relink(position,x);
861  }
862 #endif
863 
864 #if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
865  void detach_iterators(node_type* x)
866  {
867  iterator it=make_iterator(x);
868  safe_mode::detach_equivalent_iterators(it);
869  }
870 #endif
871 
872  template <class InputIterator>
873  void assign_iter(InputIterator first,InputIterator last,mpl::true_)
874  {
876  clear();
877  for(;first!=last;++first)this->final_insert_ref_(*first);
878  }
879 
881  {
883  clear();
884  for(size_type i=0;i<n;++i)push_back(value);
885  }
886 
887  template<typename InputIterator>
889  iterator position,InputIterator first,InputIterator last,mpl::true_)
890  {
892  for(;first!=last;++first){
893  std::pair<final_node_type*,bool> p=
894  this->final_insert_ref_(*first);
895  if(p.second&&position.get_node()!=header()){
896  relink(position.get_node(),p.first);
897  }
898  }
899  }
900 
903  {
905  BOOST_MULTI_INDEX_CHECK_IS_OWNER(position,*this);
907  for(size_type i=0;i<n;++i)insert(position,x);
908  }
909 
910  template<BOOST_MULTI_INDEX_TEMPLATE_PARAM_PACK>
911  std::pair<iterator,bool> emplace_front_impl(
913  {
915  }
916 
917  template<BOOST_MULTI_INDEX_TEMPLATE_PARAM_PACK>
918  std::pair<iterator,bool> emplace_back_impl(
920  {
922  }
923 
924  template<BOOST_MULTI_INDEX_TEMPLATE_PARAM_PACK>
925  std::pair<iterator,bool> emplace_impl(
927  {
929  BOOST_MULTI_INDEX_CHECK_IS_OWNER(position,*this);
931  std::pair<final_node_type*,bool> p=
932  this->final_emplace_(BOOST_MULTI_INDEX_FORWARD_PARAM_PACK);
933  if(p.second&&position.get_node()!=header()){
934  relink(position.get_node(),p.first);
935  }
936  return std::pair<iterator,bool>(make_iterator(p.first),p.second);
937  }
938 
939 #if defined(BOOST_MULTI_INDEX_ENABLE_INVARIANT_CHECKING)&&\
940  BOOST_WORKAROUND(__MWERKS__,<=0x3003)
941 #pragma parse_mfunc_templ reset
942 #endif
943 };
944 
945 /* comparison */
946 
947 template<
948  typename SuperMeta1,typename TagList1,
949  typename SuperMeta2,typename TagList2
950 >
954 {
955  return x.size()==y.size()&&std::equal(x.begin(),x.end(),y.begin());
956 }
957 
958 template<
959  typename SuperMeta1,typename TagList1,
960  typename SuperMeta2,typename TagList2
961 >
965 {
966  return std::lexicographical_compare(x.begin(),x.end(),y.begin(),y.end());
967 }
968 
969 template<
970  typename SuperMeta1,typename TagList1,
971  typename SuperMeta2,typename TagList2
972 >
976 {
977  return !(x==y);
978 }
979 
980 template<
981  typename SuperMeta1,typename TagList1,
982  typename SuperMeta2,typename TagList2
983 >
987 {
988  return y<x;
989 }
990 
991 template<
992  typename SuperMeta1,typename TagList1,
993  typename SuperMeta2,typename TagList2
994 >
998 {
999  return !(x<y);
1000 }
1001 
1002 template<
1003  typename SuperMeta1,typename TagList1,
1004  typename SuperMeta2,typename TagList2
1005 >
1009 {
1010  return !(x>y);
1011 }
1012 
1013 /* specialized algorithms */
1014 
1015 template<typename SuperMeta,typename TagList>
1016 void swap(
1019 {
1020  x.swap(y);
1021 }
1022 
1023 } /* namespace multi_index::detail */
1024 
1025 /* sequenced index specifier */
1026 
1027 template <typename TagList>
1029 {
1031 
1032  template<typename Super>
1033  struct node_class
1034  {
1036  };
1037 
1038  template<typename SuperMeta>
1040  {
1042  };
1043 };
1044 
1045 } /* namespace multi_index */
1046 
1047 } /* namespace boost */
1048 
1049 /* Boost.Foreach compatibility */
1050 
1051 template<typename SuperMeta,typename TagList>
1055 {
1056  return 0;
1057 }
1058 
1059 #undef BOOST_MULTI_INDEX_SEQ_INDEX_CHECK_INVARIANT
1060 #undef BOOST_MULTI_INDEX_SEQ_INDEX_CHECK_INVARIANT_OF
1061 
1062 #endif
seq_index_node.hpp
boost::multi_index::detail::sequenced_index::sort
void sort()
Definition: sequenced_index.hpp:552
boost::multi_index::detail::sequenced_index::make_iterator
iterator make_iterator(node_type *node)
Definition: sequenced_index.hpp:650
boost::multi_index::detail::swap
void swap(sequenced_index< SuperMeta, TagList > &x, sequenced_index< SuperMeta, TagList > &y)
Definition: sequenced_index.hpp:1016
boost::multi_index::detail::sequenced_index_unique
void sequenced_index_unique(SequencedIndex &x, BinaryPredicate binary_pred)
Definition: seq_index_ops.hpp:46
seq_index_ops.hpp
false_
bool_< false > false_
Definition: bool_fwd.hpp:25
boost::multi_index::detail::sequenced_index::relocate
void relocate(iterator position, iterator i)
Definition: sequenced_index.hpp:573
boost::multi_index::detail::sequenced_index::pointer
allocator_type::pointer pointer
Definition: sequenced_index.hpp:123
boost::multi_index::detail::do_not_copy_elements_tag
Definition: do_not_copy_elements_tag.hpp:26
boost::multi_index::detail::sequenced_index::node_type
sequenced_index_node< typename super::node_type > node_type
Definition: sequenced_index.hpp:97
boost::multi_index::detail::sequenced_index::get_allocator
allocator_type get_allocator() const BOOST_NOEXCEPT
Definition: sequenced_index.hpp:209
no_exceptions_support.hpp
boost::multi_index::detail::sequenced_index::BOOST_MULTI_INDEX_OVERLOADS_TO_VARTEMPL_EXTRA_ARG
BOOST_MULTI_INDEX_OVERLOADS_TO_VARTEMPL_EXTRA_ARG(emplace_return_type, emplace, emplace_impl, iterator, position) std
Definition: sequenced_index.hpp:301
boost::multi_index::detail::sequenced_index::ctor_args
tuples::null_type ctor_args
Definition: sequenced_index.hpp:106
boost::multi_index::detail::sequenced_index::resize
void resize(size_type n, value_param_type x)
Definition: sequenced_index.hpp:267
boost::multi_index::detail::sequenced_index_node
Definition: seq_index_node.hpp:151
access_specifier.hpp
boost::multi_index::sequenced::index_class
Definition: sequenced_index.hpp:1039
boost::multi_index::detail::sequenced_index::insert_
final_node_type * insert_(value_param_type v, node_type *position, final_node_type *&x, Variant variant)
Definition: sequenced_index.hpp:682
boost::multi_index::detail::sequenced_index::assign
void assign(size_type n, value_param_type value)
Definition: sequenced_index.hpp:202
boost::multi_index::detail::sequenced_index::erase
iterator erase(iterator first, iterator last)
Definition: sequenced_index.hpp:359
boost::multi_index::sequenced::node_class
Definition: sequenced_index.hpp:1033
boost::multi_index::sequenced::BOOST_STATIC_ASSERT
BOOST_STATIC_ASSERT(detail::is_tag< TagList >::value)
boost::multi_index::detail::sequenced_index_sort
void sequenced_index_sort(Node *header, Compare comp)
Definition: seq_index_ops.hpp:114
config.hpp
boost::multi_index::detail::sequenced_index::rbegin
const_reverse_iterator rbegin() const BOOST_NOEXCEPT
Definition: sequenced_index.hpp:227
boost::multi_index::detail::sequenced_index::crend
const_reverse_iterator crend() const BOOST_NOEXCEPT
Definition: sequenced_index.hpp:239
boost::multi_index::detail::sequenced_index::erase_
void erase_(node_type *x)
Definition: sequenced_index.hpp:690
boost::multi_index::detail::sequenced_index_node::impl
impl_pointer impl()
Definition: seq_index_node.hpp:166
BOOST_MULTI_INDEX_CHECK_IS_OWNER
#define BOOST_MULTI_INDEX_CHECK_IS_OWNER(it, cont)
Definition: safe_mode.hpp:78
boost::multi_index::detail::sequenced_index::emplace_return_type
std::pair< iterator, bool > emplace_return_type
Definition: sequenced_index.hpp:164
boost::multi_index::detail::sequenced_index::pop_front
void pop_front()
Definition: sequenced_index.hpp:290
scope_guard.hpp
s
XmlRpcServer s
boost::multi_index::sequenced::index_class::type
detail::sequenced_index< SuperMeta, typename TagList::type > type
Definition: sequenced_index.hpp:1041
boost::multi_index::detail::sequenced_index::splice
void splice(iterator position, sequenced_index< SuperMeta, TagList > &x, iterator first, iterator last)
Definition: sequenced_index.hpp:492
boost::multi_index::detail::sequenced_index::value_param_type
call_traits< value_type >::param_type value_param_type
Definition: sequenced_index.hpp:158
tuple.hpp
boost::multi_index::detail::sequenced_index::end
iterator end() BOOST_NOEXCEPT
Definition: sequenced_index.hpp:221
boost::multi_index::detail::sequenced_index::load_
void load_(Archive &ar, const unsigned int version, const index_loader_type &lm)
Definition: sequenced_index.hpp:786
BOOST_MULTI_INDEX_PROTECTED_IF_MEMBER_TEMPLATE_FRIENDS
#define BOOST_MULTI_INDEX_PROTECTED_IF_MEMBER_TEMPLATE_FRIENDS
Definition: access_specifier.hpp:28
boost::multi_index::detail::sequenced_index::merge
void merge(sequenced_index< SuperMeta, TagList > &x, Compare comp)
Definition: sequenced_index.hpp:547
boost::multi_index::detail::sequenced_index::begin
iterator begin() BOOST_NOEXCEPT
Definition: sequenced_index.hpp:216
boost::multi_index::detail::sequenced_index::rend
reverse_iterator rend() BOOST_NOEXCEPT
Definition: sequenced_index.hpp:229
boost::multi_index::detail::sequenced_index::sort
void sort(Compare comp)
Definition: sequenced_index.hpp:559
boost::type
Definition: type.hpp:14
boost::multi_index::detail::sequenced_index::remove_if
void remove_if(Predicate pred)
Definition: sequenced_index.hpp:525
bool.hpp
boost::multi_index::detail::sequenced_index::replace_
bool replace_(value_param_type v, node_type *x, Variant variant)
Definition: sequenced_index.hpp:738
boost::multi_index::detail::sequenced_index::replace
bool replace(iterator position, const value_type &x)
Definition: sequenced_index.hpp:373
call_traits.hpp
boost::multi_index::detail::sequenced_index::clear_
void clear_()
Definition: sequenced_index.hpp:709
boost::multi_index::detail::sequenced_index_node_impl::reverse
static void reverse(pointer header)
Definition: seq_index_node.hpp:89
bind.hpp
boost::multi_index::detail::sequenced_index::delete_all_nodes_
void delete_all_nodes_()
Definition: sequenced_index.hpp:700
boost::multi_index::detail::is_tag
Definition: multi_index/tag.hpp:55
boost::multi_index::detail::sequenced_index_node::prior
impl_pointer & prior()
Definition: seq_index_node.hpp:161
boost
BOOST_MOVE_USE_STANDARD_LIBRARY_MOVE.
boost::multi_index::detail::sequenced_index::index_type_list
mpl::push_front< typename super::index_type_list, sequenced_index >::type index_type_list
Definition: sequenced_index.hpp:138
boost::multi_index::detail::sequenced_index::save_
void save_(Archive &ar, const unsigned int version, const index_saver_type &sm) const
Definition: sequenced_index.hpp:778
boost::mpl::push_front
Definition: push_front.hpp:29
boost::multi_index::detail::sequenced_index_node_impl::link
static void link(pointer x, pointer header)
Definition: seq_index_node.hpp:53
boost::multi_index::detail::sequenced_index::index_saver_type
super::index_saver_type index_saver_type
Definition: sequenced_index.hpp:148
boost::multi_index::detail::sequenced_index::value_type
node_type::value_type value_type
Definition: sequenced_index.hpp:105
boost::multi_index::detail::operator==
bool operator==(const bidir_node_iterator< Node > &x, const bidir_node_iterator< Node > &y)
Definition: bidir_node_iterator.hpp:101
boost::multi_index::detail::sequenced_index::end
const_iterator end() const BOOST_NOEXCEPT
Definition: sequenced_index.hpp:223
boost::multi_index::detail::sequenced_index::BOOST_MULTI_INDEX_OVERLOADS_TO_VARTEMPL
BOOST_MULTI_INDEX_OVERLOADS_TO_VARTEMPL(emplace_return_type, emplace_front, emplace_front_impl) std
Definition: sequenced_index.hpp:283
push_front.hpp
boost::multi_index::detail::sequenced_index::difference_type
std::ptrdiff_t difference_type
Definition: sequenced_index.hpp:122
boost::multi_index::detail::sequenced_index::insert_iter
void insert_iter(iterator position, size_type n, value_param_type x, mpl::false_)
Definition: sequenced_index.hpp:901
is_integral.hpp
boost::multi_index::detail::sequenced_index_merge
void sequenced_index_merge(SequencedIndex &x, SequencedIndex &y, Compare comp)
Definition: seq_index_ops.hpp:60
BOOST_MULTI_INDEX_CHECK_OUTSIDE_RANGE
#define BOOST_MULTI_INDEX_CHECK_OUTSIDE_RANGE(it, it0, it1)
Definition: safe_mode.hpp:93
boost::multi_index::detail::sequenced_index::modify
bool modify(iterator position, Modifier mod, Rollback back_)
Definition: sequenced_index.hpp:415
boost::multi_index::detail::sequenced_index::link
void link(node_type *x)
Definition: sequenced_index.hpp:834
boost::multi_index::detail::sequenced_index::splice
void splice(iterator position, sequenced_index< SuperMeta, TagList > &x)
Definition: sequenced_index.hpp:450
boost::multi_index::sequenced::node_class::type
detail::sequenced_index_node< Super > type
Definition: sequenced_index.hpp:1035
boost::multi_index::detail::sequenced_index::front
const_reference front() const
Definition: sequenced_index.hpp:278
boost::multi_index::detail::sequenced_index::operator=
sequenced_index< SuperMeta, TagList > & operator=(std::initializer_list< value_type > list)
Definition: sequenced_index.hpp:181
boost::multi_index::detail::sequenced_index_node_impl::unlink
static void unlink(pointer x)
Definition: seq_index_node.hpp:60
boost::multi_index::detail::sequenced_index::crbegin
const_reverse_iterator crbegin() const BOOST_NOEXCEPT
Definition: sequenced_index.hpp:237
boost::multi_index::detail::sequenced_index::sequenced_index
sequenced_index(const sequenced_index< SuperMeta, TagList > &x)
Definition: sequenced_index.hpp:617
boost::multi_index::detail::sequenced_index::sequenced_index
sequenced_index(const sequenced_index< SuperMeta, TagList > &x, do_not_copy_elements_tag)
Definition: sequenced_index.hpp:628
boost::multi_index::detail::sequenced_index::reverse_iterator
boost::reverse_iterator< iterator > reverse_iterator
Definition: sequenced_index.hpp:126
boost::multi_index::detail::sequenced_index::emplace_front_impl
std::pair< iterator, bool > emplace_front_impl(BOOST_MULTI_INDEX_FUNCTION_PARAM_PACK)
Definition: sequenced_index.hpp:911
boost::multi_index::detail::sequenced_index::clear
void clear() BOOST_NOEXCEPT
Definition: sequenced_index.hpp:442
boost::multi_index::detail::sequenced_index_node::increment
static void increment(sequenced_index_node *&x)
Definition: seq_index_node.hpp:196
boost::multi_index::detail::sequenced_index::push_front
std::pair< iterator, bool > push_front(BOOST_RV_REF(value_type) x)
Definition: sequenced_index.hpp:288
boost::arg
Definition: bind/arg.hpp:29
boost::multi_index::detail::sequenced_index::unlink
static void unlink(node_type *x)
Definition: sequenced_index.hpp:839
boost::multi_index::detail::sequenced_index::assign_iter
void assign_iter(InputIterator first, InputIterator last, mpl::true_)
Definition: sequenced_index.hpp:873
sequenced_index_fwd.hpp
boost::multi_index::detail::sequenced_index::relink
static void relink(node_type *position, node_type *x)
Definition: sequenced_index.hpp:844
boost::multi_index::detail::sequenced_index::reverse
void reverse() BOOST_NOEXCEPT
Definition: sequenced_index.hpp:565
boost::iterators::make_reverse_iterator
reverse_iterator< BidirectionalIterator > make_reverse_iterator(BidirectionalIterator x)
Definition: iterator/reverse_iterator.hpp:62
boost::multi_index::detail::sequenced_index::insert_iter
void insert_iter(iterator position, InputIterator first, InputIterator last, mpl::true_)
Definition: sequenced_index.hpp:888
boost::multi_index::detail::sequenced_index::rearranger
void rearranger(node_type *position, node_type *x)
Definition: sequenced_index.hpp:856
BOOST_NOEXCEPT
#define BOOST_NOEXCEPT
Definition: suffix.hpp:938
boost::multi_index::detail::sequenced_index::copy_
void copy_(const sequenced_index< SuperMeta, TagList > &x, const copy_map_type &map)
Definition: sequenced_index.hpp:655
boost::multi_index::detail::sequenced_index::replace
bool replace(iterator position, BOOST_RV_REF(value_type) x)
Definition: sequenced_index.hpp:383
boost::multi_index::detail::sequenced_index::remove
void remove(value_param_type value)
Definition: sequenced_index.hpp:517
boost::multi_index::detail::bidir_node_iterator
Definition: bidir_node_iterator.hpp:35
BOOST_MULTI_INDEX_CHECK_DIFFERENT_CONTAINER
#define BOOST_MULTI_INDEX_CHECK_DIFFERENT_CONTAINER(cont0, cont1)
Definition: safe_mode.hpp:103
boost::multi_index::detail::sequenced_index::rbegin
reverse_iterator rbegin() BOOST_NOEXCEPT
Definition: sequenced_index.hpp:225
boost::multi_index::detail::operator<=
bool operator<=(const ordered_index< KeyFromValue1, Compare1, SuperMeta1, TagList1, Category1, AugmentPolicy1 > &x, const ordered_index< KeyFromValue2, Compare2, SuperMeta2, TagList2, Category2, AugmentPolicy2 > &y)
Definition: ord_index_impl.hpp:1520
boost_foreach_argument_dependent_lookup_hack
boost_foreach_argument_dependent_lookup_hack
Definition: foreach_fwd.hpp:18
boost::multi_index::detail::sequenced_index::assign
void assign(InputIterator first, InputIterator last)
Definition: sequenced_index.hpp:190
boost::multi_index::detail::sequenced_index::cbegin
const_iterator cbegin() const BOOST_NOEXCEPT
Definition: sequenced_index.hpp:233
boost::multi_index::detail::sequenced_index::insert
void insert(iterator position, std::initializer_list< value_type > list)
Definition: sequenced_index.hpp:343
boost::multi_index::detail::sequenced_index::size_type
std::size_t size_type
Definition: sequenced_index.hpp:121
boost::multi_index::detail::sequenced_index::splice
void splice(iterator position, sequenced_index< SuperMeta, TagList > &x, iterator i)
Definition: sequenced_index.hpp:463
boost::multi_index::detail::sequenced_index::empty_initialize
void empty_initialize()
Definition: sequenced_index.hpp:829
boost::multi_index::detail::sequenced_index::insert_
final_node_type * insert_(value_param_type v, final_node_type *&x, Variant variant)
Definition: sequenced_index.hpp:673
boost::multi_index::detail::sequenced_index::merge
void merge(sequenced_index< SuperMeta, TagList > &x)
Definition: sequenced_index.hpp:541
boost::multi_index::detail::sequenced_index::max_size
size_type max_size() const BOOST_NOEXCEPT
Definition: sequenced_index.hpp:255
boost::multi_index::detail::sequenced_index::iterator_to
iterator iterator_to(const value_type &x)
Definition: sequenced_index.hpp:241
boost::multi_index::detail::sequenced_index::rend
const_reverse_iterator rend() const BOOST_NOEXCEPT
Definition: sequenced_index.hpp:231
boost::multi_index::detail::sequenced_index::const_iterator
iterator const_iterator
Definition: sequenced_index.hpp:119
boost::multi_index::detail::sequenced_index
Definition: sequenced_index.hpp:74
boost::multi_index::detail::operator>=
bool operator>=(const ordered_index< KeyFromValue1, Compare1, SuperMeta1, TagList1, Category1, AugmentPolicy1 > &x, const ordered_index< KeyFromValue2, Compare2, SuperMeta2, TagList2, Category2, AugmentPolicy2 > &y)
Definition: ord_index_impl.hpp:1503
boost::iterators::reverse_iterator
Definition: iterator/reverse_iterator.hpp:21
reverse_iterator.hpp
boost::multi_index::detail::sequenced_index::assign_iter
void assign_iter(size_type n, value_param_type value, mpl::false_)
Definition: sequenced_index.hpp:880
boost::multi_index::detail::sequenced_index::unique
void unique(BinaryPredicate binary_pred)
Definition: sequenced_index.hpp:536
BOOST_TRY
#define BOOST_TRY
Definition: core/no_exceptions_support.hpp:27
boost::multi_index::detail::operator!=
bool operator!=(const duplicates_iterator< Node, Predicate > &x, const duplicates_iterator< Node, Predicate > &y)
Definition: duplicates_iterator.hpp:107
BOOST_RV_REF
#define BOOST_RV_REF(TYPE)
Definition: core.hpp:340
vartempl_support.hpp
boost::multi_index::detail::sequenced_index::resize
void resize(size_type n)
Definition: sequenced_index.hpp:257
BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR
#define BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(it)
Definition: safe_mode.hpp:58
boost::multi_index::detail::sequenced_index::reference
allocator_type::reference reference
Definition: sequenced_index.hpp:108
boost::multi_index::detail::sequenced_index::iterator
bidir_node_iterator< node_type > iterator
Definition: sequenced_index.hpp:116
BOOST_CATCH
#define BOOST_CATCH(x)
Definition: core/no_exceptions_support.hpp:28
BOOST_MULTI_INDEX_FUNCTION_PARAM_PACK
#define BOOST_MULTI_INDEX_FUNCTION_PARAM_PACK
Definition: vartempl_support.hpp:209
allocator_utilities.hpp
boost::multi_index::detail::sequenced_index::modify_rollback_
bool modify_rollback_(node_type *x)
Definition: sequenced_index.hpp:769
boost::multi_index::detail::sequenced_index::emplace_impl
std::pair< iterator, bool > emplace_impl(iterator position, BOOST_MULTI_INDEX_FUNCTION_PARAM_PACK)
Definition: sequenced_index.hpp:925
boost::multi_index::detail::sequenced_index::ctor_args_list
tuples::cons< ctor_args, typename super::ctor_args_list > ctor_args_list
Definition: sequenced_index.hpp:135
boost::property_tree::detail::rapidxml::node_type
node_type
Definition: rapidxml.hpp:117
foreach_fwd.hpp
boost::multi_index::detail::sequenced_index::insert
void insert(iterator position, InputIterator first, InputIterator last)
Definition: sequenced_index.hpp:337
boost::next
T next(T x)
Definition: next_prior.hpp:146
boost::multi_index::detail::sequenced_index::pop_back
void pop_back()
Definition: sequenced_index.hpp:299
boost::multi_index::detail::sequenced_index::super
SuperMeta::type super
Definition: sequenced_index.hpp:93
boost::multi_index::detail::sequenced_index_node::next
impl_pointer & next()
Definition: seq_index_node.hpp:163
boost::multi_index::detail::sequenced_index_node_impl::relink
static void relink(pointer position, pointer x)
Definition: seq_index_node.hpp:66
boost::multi_index::detail::sequenced_index::modify
bool modify(iterator position, Modifier mod)
Definition: sequenced_index.hpp:394
boost::call_traits::param_type
boost::detail::ct_imp< T, ::boost::is_pointer< T >::value, ::boost::is_arithmetic< T >::value, ::boost::is_enum< T >::value >::param_type param_type
Definition: detail/call_traits.hpp:91
boost::multi_index::detail::sequenced_index::assign
void assign(std::initializer_list< value_type > list)
Definition: sequenced_index.hpp:196
boost::iterators::i
D const & i
Definition: iterator_facade.hpp:956
boost::multi_index::detail::sequenced_index::back
const_reference back() const
Definition: sequenced_index.hpp:279
boost::multi_index::detail::sequenced_index::allocator_type
super::final_allocator_type allocator_type
Definition: sequenced_index.hpp:107
boost::multi_index::detail::sequenced_index::const_pointer
allocator_type::const_pointer const_pointer
Definition: sequenced_index.hpp:124
boost::multi_index::detail::sequenced_index::size
size_type size() const BOOST_NOEXCEPT
Definition: sequenced_index.hpp:254
boost::multi_index::detail::sequenced_index::rearrange
void rearrange(InputIterator first)
Definition: sequenced_index.hpp:600
boost::multi_index::detail::sequenced_index::cend
const_iterator cend() const BOOST_NOEXCEPT
Definition: sequenced_index.hpp:235
utility.hpp
boost::multi_index::detail::sequenced_index::push_back
std::pair< iterator, bool > push_back(BOOST_RV_REF(value_type) x)
Definition: sequenced_index.hpp:297
safe_mode.hpp
index_node_base.hpp
boost::multi_index::detail::sequenced_index::const_reverse_iterator
boost::reverse_iterator< const_iterator > const_reverse_iterator
Definition: sequenced_index.hpp:128
boost::multi_index::detail::sequenced_index::index_loader_type
super::index_loader_type index_loader_type
Definition: sequenced_index.hpp:149
bidir_node_iterator.hpp
boost::multi_index::detail::sequenced_index::final_node_type
super::final_node_type final_node_type
Definition: sequenced_index.hpp:132
boost::multi_index::detail::sequenced_index::swap_
void swap_(sequenced_index< SuperMeta, TagList > &x)
Definition: sequenced_index.hpp:719
boost::multi_index::detail::sequenced_index::iterator_to
const_iterator iterator_to(const value_type &x) const
Definition: sequenced_index.hpp:246
BOOST_MULTI_INDEX_NULL_PARAM_PACK
#define BOOST_MULTI_INDEX_NULL_PARAM_PACK
Definition: vartempl_support.hpp:211
boost::multi_index::detail::swap
void swap(auto_space< T, Allocator > &x, auto_space< T, Allocator > &y)
Definition: auto_space.hpp:80
BOOST_MULTI_INDEX_SEQ_INDEX_CHECK_INVARIANT_OF
#define BOOST_MULTI_INDEX_SEQ_INDEX_CHECK_INVARIANT_OF(x)
Definition: sequenced_index.hpp:61
boost::multi_index::detail::sequenced_index::make_iterator
const_iterator make_iterator(node_type *node) const
Definition: sequenced_index.hpp:651
BOOST_RETHROW
#define BOOST_RETHROW
Definition: core/no_exceptions_support.hpp:29
true_
bool_< true > true_
Definition: bool_fwd.hpp:21
boost::multi_index::detail::sequenced_index::~sequenced_index
~sequenced_index()
Definition: sequenced_index.hpp:640
BOOST_MULTI_INDEX_SEQ_INDEX_CHECK_INVARIANT
#define BOOST_MULTI_INDEX_SEQ_INDEX_CHECK_INVARIANT
Definition: sequenced_index.hpp:62
boost::tuples::null_type
Definition: tuple_basic.hpp:53
boost::multi_index::detail::sequenced_index::relink
static void relink(node_type *position, node_type *first, node_type *last)
Definition: sequenced_index.hpp:849
boost::multi_index::detail::sequenced_index::BOOST_MULTI_INDEX_OVERLOADS_TO_VARTEMPL
BOOST_MULTI_INDEX_OVERLOADS_TO_VARTEMPL(emplace_return_type, emplace_back, emplace_back_impl) std
Definition: sequenced_index.hpp:292
boost::multi_index::detail::sequenced_index::emplace_back_impl
std::pair< iterator, bool > emplace_back_impl(BOOST_MULTI_INDEX_FUNCTION_PARAM_PACK)
Definition: sequenced_index.hpp:918
boost::multi_index::detail::sequenced_index::unique
void unique()
Definition: sequenced_index.hpp:530
boost::multi_index::detail::sequenced_index::al
BOOST_MULTI_INDEX_PROTECTED_IF_MEMBER_TEMPLATE_FRIENDS const allocator_type & al
Definition: sequenced_index.hpp:612
boost::multi_index::detail::operator>
bool operator>(const ordered_index< KeyFromValue1, Compare1, SuperMeta1, TagList1, Category1, AugmentPolicy1 > &x, const ordered_index< KeyFromValue2, Compare2, SuperMeta2, TagList2, Category2, AugmentPolicy2 > &y)
Definition: ord_index_impl.hpp:1486
BOOST_CATCH_END
#define BOOST_CATCH_END
Definition: core/no_exceptions_support.hpp:30
core.hpp
boost::multi_index::detail::sequenced_index::operator=
sequenced_index< SuperMeta, TagList > & operator=(const sequenced_index< SuperMeta, TagList > &x)
Definition: sequenced_index.hpp:173
boost::multi_index::detail::sequenced_index::insert
std::pair< iterator, bool > insert(iterator position, BOOST_RV_REF(value_type) x)
Definition: sequenced_index.hpp:316
boost::prior
T prior(T x)
Definition: next_prior.hpp:155
BOOST_MULTI_INDEX_CHECK_VALID_RANGE
#define BOOST_MULTI_INDEX_CHECK_VALID_RANGE(it0, it1)
Definition: safe_mode.hpp:88
boost::multi_index::detail::sequenced_index::header
node_type * header() const
Definition: sequenced_index.hpp:827
boost::move
BOOST_MOVE_FORCEINLINE ::boost::move_detail::remove_reference< T >::type && move(T &&t) BOOST_NOEXCEPT
Definition: utility_core.hpp:212
boost::mpl::not_
Definition: not.hpp:39
boost_foreach_is_noncopyable
boost::mpl::true_ * boost_foreach_is_noncopyable(boost::multi_index::detail::sequenced_index< SuperMeta, TagList > *&, boost_foreach_argument_dependent_lookup_hack)
Definition: sequenced_index.hpp:1052
boost::multi_index::sequenced
Definition: sequenced_index.hpp:1028
boost::multi_index::detail::sequenced_index::swap
void swap(sequenced_index< SuperMeta, TagList > &x)
Definition: sequenced_index.hpp:435
not.hpp
boost::multi_index::detail::sequenced_index::swap_elements_
void swap_elements_(sequenced_index< SuperMeta, TagList > &x)
Definition: sequenced_index.hpp:728
do_not_copy_elements_tag.hpp
boost::multi_index::detail::sequenced_index_remove
void sequenced_index_remove(SequencedIndex &x, Predicate pred)
Definition: seq_index_ops.hpp:35
workaround.hpp
boost::multi_index::detail::sequenced_index_node_impl
Definition: seq_index_node.hpp:30
boost::multi_index::detail::sequenced_index::insert
void insert(iterator position, size_type n, value_param_type x)
Definition: sequenced_index.hpp:328
boost::multi_index::detail::sequenced_index::relocate
void relocate(iterator position, iterator first, iterator last)
Definition: sequenced_index.hpp:584
boost::multi_index::detail::sequenced_index::const_reference
allocator_type::const_reference const_reference
Definition: sequenced_index.hpp:109
boost::multi_index::detail::sequenced_index::empty
bool empty() const BOOST_NOEXCEPT
Definition: sequenced_index.hpp:253
boost::multi_index::detail::sequenced_index_node::from_impl
static sequenced_index_node * from_impl(impl_pointer x)
Definition: seq_index_node.hpp:178
boost::multi_index::detail::sequenced_index::modify_
bool modify_(node_type *x)
Definition: sequenced_index.hpp:743
boost::tuples::cons
Definition: tuple_basic.hpp:72
boost::multi_index::detail::sequenced_index::copy_map_type
super::copy_map_type copy_map_type
Definition: sequenced_index.hpp:145
boost::multi_index::detail::sequenced_index::const_iterator_type_list
mpl::push_front< typename super::const_iterator_type_list, const_iterator >::type const_iterator_type_list
Definition: sequenced_index.hpp:144
boost::multi_index::detail::sequenced_index::node_impl_type
node_type::impl_type node_impl_type
Definition: sequenced_index.hpp:100
boost::multi_index::detail::sequenced_index::erase
iterator erase(iterator position)
Definition: sequenced_index.hpp:349
boost::multi_index::detail::sequenced_index::iterator_type_list
mpl::push_front< typename super::iterator_type_list, iterator >::type iterator_type_list
Definition: sequenced_index.hpp:141
BOOST_MULTI_INDEX_FORWARD_PARAM_PACK
#define BOOST_MULTI_INDEX_FORWARD_PARAM_PACK
Definition: vartempl_support.hpp:210
BOOST_MULTI_INDEX_CHECK_DEREFERENCEABLE_ITERATOR
#define BOOST_MULTI_INDEX_CHECK_DEREFERENCEABLE_ITERATOR(it)
Definition: safe_mode.hpp:63
boost::multi_index::detail::sequenced_index::begin
const_iterator begin() const BOOST_NOEXCEPT
Definition: sequenced_index.hpp:218
boost::is_integral
Definition: is_integral.hpp:22
boost::multi_index::detail::operator<
bool operator<(const random_access_iter_adaptor_base< Derived, Base > &x, const random_access_iter_adaptor_base< Derived, Base > &y)
Definition: iter_adaptor.hpp:264
boost::multi_index::detail::sequenced_index::tag_list
TagList tag_list
Definition: sequenced_index.hpp:129
boost::multi_index::detail::bidir_node_iterator::get_node
Node * get_node() const
Definition: bidir_node_iterator.hpp:94


sick_visionary_ros
Author(s): SICK AG TechSupport 3D Snapshot
autogenerated on Thu Feb 8 2024 03:46:47