Go to the documentation of this file.
9 #ifndef BOOST_MULTI_INDEX_SEQUENCED_INDEX_HPP
10 #define BOOST_MULTI_INDEX_SEQUENCED_INDEX_HPP
45 #if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST)
46 #include<initializer_list>
49 #if !defined(BOOST_MULTI_INDEX_DISABLE_SERIALIZATION)
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)
61 #define BOOST_MULTI_INDEX_SEQ_INDEX_CHECK_INVARIANT_OF(x)
62 #define BOOST_MULTI_INDEX_SEQ_INDEX_CHECK_INVARIANT
67 namespace multi_index{
73 template<
typename SuperMeta,
typename TagList>
77 #if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
78 ,
public safe_mode::safe_container<
79 sequenced_index<SuperMeta,TagList> >
83 #if defined(BOOST_MULTI_INDEX_ENABLE_INVARIANT_CHECKING)&&\
84 BOOST_WORKAROUND(__MWERKS__,<=0x3003)
90 #pragma parse_mfunc_templ off
93 typedef typename SuperMeta::type
super;
111 #if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
112 typedef safe_mode::safe_iterator<
123 typedef typename allocator_type::pointer
pointer;
137 typename super::index_type_list,
140 typename super::iterator_type_list,
143 typename super::const_iterator_type_list,
147 #if !defined(BOOST_MULTI_INDEX_DISABLE_SERIALIZATION)
153 #if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
154 typedef safe_mode::safe_container<
176 this->
final()=x.final();
180 #if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST)
182 std::initializer_list<value_type> list)
189 template <
class InputIterator>
190 void assign(InputIterator first,InputIterator last)
195 #if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST)
196 void assign(std::initializer_list<value_type> list)
198 assign(list.begin(),list.end());
309 std::pair<final_node_type*,bool> p=this->final_insert_(x);
313 return std::pair<iterator,bool>(
make_iterator(p.first),p.second);
321 std::pair<final_node_type*,bool> p=this->final_insert_rv_(x);
325 return std::pair<iterator,bool>(
make_iterator(p.first),p.second);
336 template<
typename InputIterator>
342 #if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST)
345 insert(position,list.begin(),list.end());
355 this->final_erase_(
static_cast<final_node_type*
>(position++.get_node()));
379 return this->final_replace_(
389 return this->final_replace_rv_(
393 template<
typename Modifier>
401 #if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
410 return this->final_modify_(
414 template<
typename Modifier,
typename Rollback>
422 #if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
431 return this->final_modify_(
439 this->final_swap_(x.final());
445 this->final_clear_();
458 if(
insert(position,*first).second)first=x.
erase(first);
475 if(
insert(position,*
i).second){
477 #if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
511 if(
insert(position,*first).second)first=x.
erase(first);
521 ::boost::bind(std::equal_to<value_type>(),::
boost::arg<1>(),value));
524 template<
typename Predicate>
535 template <
class BinaryPredicate>
546 template <
typename Compare>
558 template <
typename Compare>
599 template<
typename InputIterator>
606 relink(pos,node_from_value<node_type>(&v));
620 #if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
632 #if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
645 #if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
672 template<
typename Variant>
681 template<
typename Variant>
695 #if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
714 #if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
715 safe_super::detach_dereferenceable_iterators();
721 #if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
730 #if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
734 super::swap_elements_(x);
737 template<
typename Variant>
740 return super::replace_(v,x,variant);
746 if(!super::modify_(x)){
749 #if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
760 #if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
771 return super::modify_rollback_(x);
774 #if !defined(BOOST_MULTI_INDEX_DISABLE_SERIALIZATION)
777 template<
typename Archive>
782 super::save_(ar,version,sm);
785 template<
typename Archive>
793 super::load_(ar,version,lm);
797 #if defined(BOOST_MULTI_INDEX_ENABLE_INVARIANT_CHECKING)
800 bool invariant_()
const
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;
813 if(s!=
size())
return false;
816 return super::invariant_();
823 void check_invariant_()
const{this->final_check_invariant_();}
855 #if !defined(BOOST_MULTI_INDEX_DISABLE_SERIALIZATION)
858 if(!position)position=
header();
860 if(position!=x)
relink(position,x);
864 #if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
868 safe_mode::detach_equivalent_iterators(it);
872 template <
class InputIterator>
877 for(;first!=last;++first)this->final_insert_ref_(*first);
887 template<
typename InputIterator>
892 for(;first!=last;++first){
893 std::pair<final_node_type*,bool> p=
894 this->final_insert_ref_(*first);
910 template<BOOST_MULTI_INDEX_TEMPLATE_PARAM_PACK>
917 template<BOOST_MULTI_INDEX_TEMPLATE_PARAM_PACK>
924 template<BOOST_MULTI_INDEX_TEMPLATE_PARAM_PACK>
931 std::pair<final_node_type*,bool> p=
936 return std::pair<iterator,bool>(
make_iterator(p.first),p.second);
939 #if defined(BOOST_MULTI_INDEX_ENABLE_INVARIANT_CHECKING)&&\
940 BOOST_WORKAROUND(__MWERKS__,<=0x3003)
941 #pragma parse_mfunc_templ reset
948 typename SuperMeta1,
typename TagList1,
949 typename SuperMeta2,
typename TagList2
959 typename SuperMeta1,
typename TagList1,
960 typename SuperMeta2,
typename TagList2
970 typename SuperMeta1,
typename TagList1,
971 typename SuperMeta2,
typename TagList2
981 typename SuperMeta1,
typename TagList1,
982 typename SuperMeta2,
typename TagList2
992 typename SuperMeta1,
typename TagList1,
993 typename SuperMeta2,
typename TagList2
1003 typename SuperMeta1,
typename TagList1,
1004 typename SuperMeta2,
typename TagList2
1015 template<
typename SuperMeta,
typename TagList>
1027 template <
typename TagList>
1032 template<
typename Super>
1038 template<
typename SuperMeta>
1051 template<
typename SuperMeta,
typename TagList>
1059 #undef BOOST_MULTI_INDEX_SEQ_INDEX_CHECK_INVARIANT
1060 #undef BOOST_MULTI_INDEX_SEQ_INDEX_CHECK_INVARIANT_OF
iterator make_iterator(node_type *node)
void swap(sequenced_index< SuperMeta, TagList > &x, sequenced_index< SuperMeta, TagList > &y)
void sequenced_index_unique(SequencedIndex &x, BinaryPredicate binary_pred)
void relocate(iterator position, iterator i)
allocator_type::pointer pointer
sequenced_index_node< typename super::node_type > node_type
allocator_type get_allocator() const BOOST_NOEXCEPT
BOOST_MULTI_INDEX_OVERLOADS_TO_VARTEMPL_EXTRA_ARG(emplace_return_type, emplace, emplace_impl, iterator, position) std
tuples::null_type ctor_args
void resize(size_type n, value_param_type x)
final_node_type * insert_(value_param_type v, node_type *position, final_node_type *&x, Variant variant)
void assign(size_type n, value_param_type value)
iterator erase(iterator first, iterator last)
BOOST_STATIC_ASSERT(detail::is_tag< TagList >::value)
void sequenced_index_sort(Node *header, Compare comp)
const_reverse_iterator rbegin() const BOOST_NOEXCEPT
const_reverse_iterator crend() const BOOST_NOEXCEPT
void erase_(node_type *x)
#define BOOST_MULTI_INDEX_CHECK_IS_OWNER(it, cont)
std::pair< iterator, bool > emplace_return_type
detail::sequenced_index< SuperMeta, typename TagList::type > type
void splice(iterator position, sequenced_index< SuperMeta, TagList > &x, iterator first, iterator last)
call_traits< value_type >::param_type value_param_type
iterator end() BOOST_NOEXCEPT
void load_(Archive &ar, const unsigned int version, const index_loader_type &lm)
#define BOOST_MULTI_INDEX_PROTECTED_IF_MEMBER_TEMPLATE_FRIENDS
void merge(sequenced_index< SuperMeta, TagList > &x, Compare comp)
iterator begin() BOOST_NOEXCEPT
reverse_iterator rend() BOOST_NOEXCEPT
void remove_if(Predicate pred)
bool replace_(value_param_type v, node_type *x, Variant variant)
bool replace(iterator position, const value_type &x)
static void reverse(pointer header)
BOOST_MOVE_USE_STANDARD_LIBRARY_MOVE.
mpl::push_front< typename super::index_type_list, sequenced_index >::type index_type_list
void save_(Archive &ar, const unsigned int version, const index_saver_type &sm) const
static void link(pointer x, pointer header)
super::index_saver_type index_saver_type
node_type::value_type value_type
bool operator==(const bidir_node_iterator< Node > &x, const bidir_node_iterator< Node > &y)
const_iterator end() const BOOST_NOEXCEPT
BOOST_MULTI_INDEX_OVERLOADS_TO_VARTEMPL(emplace_return_type, emplace_front, emplace_front_impl) std
std::ptrdiff_t difference_type
void insert_iter(iterator position, size_type n, value_param_type x, mpl::false_)
void sequenced_index_merge(SequencedIndex &x, SequencedIndex &y, Compare comp)
#define BOOST_MULTI_INDEX_CHECK_OUTSIDE_RANGE(it, it0, it1)
bool modify(iterator position, Modifier mod, Rollback back_)
void splice(iterator position, sequenced_index< SuperMeta, TagList > &x)
detail::sequenced_index_node< Super > type
const_reference front() const
sequenced_index< SuperMeta, TagList > & operator=(std::initializer_list< value_type > list)
static void unlink(pointer x)
const_reverse_iterator crbegin() const BOOST_NOEXCEPT
sequenced_index(const sequenced_index< SuperMeta, TagList > &x)
sequenced_index(const sequenced_index< SuperMeta, TagList > &x, do_not_copy_elements_tag)
boost::reverse_iterator< iterator > reverse_iterator
std::pair< iterator, bool > emplace_front_impl(BOOST_MULTI_INDEX_FUNCTION_PARAM_PACK)
void clear() BOOST_NOEXCEPT
static void increment(sequenced_index_node *&x)
std::pair< iterator, bool > push_front(BOOST_RV_REF(value_type) x)
static void unlink(node_type *x)
void assign_iter(InputIterator first, InputIterator last, mpl::true_)
static void relink(node_type *position, node_type *x)
void reverse() BOOST_NOEXCEPT
reverse_iterator< BidirectionalIterator > make_reverse_iterator(BidirectionalIterator x)
void insert_iter(iterator position, InputIterator first, InputIterator last, mpl::true_)
void rearranger(node_type *position, node_type *x)
void copy_(const sequenced_index< SuperMeta, TagList > &x, const copy_map_type &map)
bool replace(iterator position, BOOST_RV_REF(value_type) x)
void remove(value_param_type value)
#define BOOST_MULTI_INDEX_CHECK_DIFFERENT_CONTAINER(cont0, cont1)
reverse_iterator rbegin() BOOST_NOEXCEPT
bool operator<=(const ordered_index< KeyFromValue1, Compare1, SuperMeta1, TagList1, Category1, AugmentPolicy1 > &x, const ordered_index< KeyFromValue2, Compare2, SuperMeta2, TagList2, Category2, AugmentPolicy2 > &y)
boost_foreach_argument_dependent_lookup_hack
void assign(InputIterator first, InputIterator last)
const_iterator cbegin() const BOOST_NOEXCEPT
void insert(iterator position, std::initializer_list< value_type > list)
void splice(iterator position, sequenced_index< SuperMeta, TagList > &x, iterator i)
final_node_type * insert_(value_param_type v, final_node_type *&x, Variant variant)
void merge(sequenced_index< SuperMeta, TagList > &x)
size_type max_size() const BOOST_NOEXCEPT
iterator iterator_to(const value_type &x)
const_reverse_iterator rend() const BOOST_NOEXCEPT
bool operator>=(const ordered_index< KeyFromValue1, Compare1, SuperMeta1, TagList1, Category1, AugmentPolicy1 > &x, const ordered_index< KeyFromValue2, Compare2, SuperMeta2, TagList2, Category2, AugmentPolicy2 > &y)
void assign_iter(size_type n, value_param_type value, mpl::false_)
void unique(BinaryPredicate binary_pred)
bool operator!=(const duplicates_iterator< Node, Predicate > &x, const duplicates_iterator< Node, Predicate > &y)
#define BOOST_RV_REF(TYPE)
#define BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(it)
allocator_type::reference reference
bidir_node_iterator< node_type > iterator
#define BOOST_MULTI_INDEX_FUNCTION_PARAM_PACK
bool modify_rollback_(node_type *x)
std::pair< iterator, bool > emplace_impl(iterator position, BOOST_MULTI_INDEX_FUNCTION_PARAM_PACK)
tuples::cons< ctor_args, typename super::ctor_args_list > ctor_args_list
void insert(iterator position, InputIterator first, InputIterator last)
static void relink(pointer position, pointer x)
bool modify(iterator position, Modifier mod)
boost::detail::ct_imp< T, ::boost::is_pointer< T >::value, ::boost::is_arithmetic< T >::value, ::boost::is_enum< T >::value >::param_type param_type
void assign(std::initializer_list< value_type > list)
const_reference back() const
super::final_allocator_type allocator_type
allocator_type::const_pointer const_pointer
size_type size() const BOOST_NOEXCEPT
void rearrange(InputIterator first)
const_iterator cend() const BOOST_NOEXCEPT
std::pair< iterator, bool > push_back(BOOST_RV_REF(value_type) x)
boost::reverse_iterator< const_iterator > const_reverse_iterator
super::index_loader_type index_loader_type
super::final_node_type final_node_type
void swap_(sequenced_index< SuperMeta, TagList > &x)
const_iterator iterator_to(const value_type &x) const
#define BOOST_MULTI_INDEX_NULL_PARAM_PACK
void swap(auto_space< T, Allocator > &x, auto_space< T, Allocator > &y)
#define BOOST_MULTI_INDEX_SEQ_INDEX_CHECK_INVARIANT_OF(x)
const_iterator make_iterator(node_type *node) const
#define BOOST_MULTI_INDEX_SEQ_INDEX_CHECK_INVARIANT
static void relink(node_type *position, node_type *first, node_type *last)
BOOST_MULTI_INDEX_OVERLOADS_TO_VARTEMPL(emplace_return_type, emplace_back, emplace_back_impl) std
std::pair< iterator, bool > emplace_back_impl(BOOST_MULTI_INDEX_FUNCTION_PARAM_PACK)
BOOST_MULTI_INDEX_PROTECTED_IF_MEMBER_TEMPLATE_FRIENDS const allocator_type & al
bool operator>(const ordered_index< KeyFromValue1, Compare1, SuperMeta1, TagList1, Category1, AugmentPolicy1 > &x, const ordered_index< KeyFromValue2, Compare2, SuperMeta2, TagList2, Category2, AugmentPolicy2 > &y)
sequenced_index< SuperMeta, TagList > & operator=(const sequenced_index< SuperMeta, TagList > &x)
std::pair< iterator, bool > insert(iterator position, BOOST_RV_REF(value_type) x)
#define BOOST_MULTI_INDEX_CHECK_VALID_RANGE(it0, it1)
node_type * header() const
BOOST_MOVE_FORCEINLINE ::boost::move_detail::remove_reference< T >::type && move(T &&t) BOOST_NOEXCEPT
boost::mpl::true_ * boost_foreach_is_noncopyable(boost::multi_index::detail::sequenced_index< SuperMeta, TagList > *&, boost_foreach_argument_dependent_lookup_hack)
void swap(sequenced_index< SuperMeta, TagList > &x)
void swap_elements_(sequenced_index< SuperMeta, TagList > &x)
void sequenced_index_remove(SequencedIndex &x, Predicate pred)
void insert(iterator position, size_type n, value_param_type x)
void relocate(iterator position, iterator first, iterator last)
allocator_type::const_reference const_reference
bool empty() const BOOST_NOEXCEPT
static sequenced_index_node * from_impl(impl_pointer x)
bool modify_(node_type *x)
super::copy_map_type copy_map_type
mpl::push_front< typename super::const_iterator_type_list, const_iterator >::type const_iterator_type_list
node_type::impl_type node_impl_type
iterator erase(iterator position)
mpl::push_front< typename super::iterator_type_list, iterator >::type iterator_type_list
#define BOOST_MULTI_INDEX_FORWARD_PARAM_PACK
#define BOOST_MULTI_INDEX_CHECK_DEREFERENCEABLE_ITERATOR(it)
const_iterator begin() const BOOST_NOEXCEPT
bool operator<(const random_access_iter_adaptor_base< Derived, Base > &x, const random_access_iter_adaptor_base< Derived, Base > &y)
sick_visionary_ros
Author(s): SICK AG TechSupport 3D Snapshot
autogenerated on Thu Feb 8 2024 03:46:47