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)
6 * See http://www.boost.org/libs/multi_index for library home page.
9 #ifndef BOOST_MULTI_INDEX_ORDERED_INDEX_HPP
10 #define BOOST_MULTI_INDEX_ORDERED_INDEX_HPP
16 #include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */
17 #include <boost/multi_index/detail/ord_index_impl.hpp>
18 #include <boost/multi_index/ordered_index_fwd.hpp>
22 namespace multi_index{
26 /* no augment policy for plain ordered indices */
28 struct null_augment_policy
30 template<typename OrderedIndexImpl>
31 struct augmented_interface
33 typedef OrderedIndexImpl type;
36 template<typename OrderedIndexNodeImpl>
39 typedef OrderedIndexNodeImpl type;
42 template<typename Pointer> static void add(Pointer,Pointer){}
43 template<typename Pointer> static void remove(Pointer,Pointer){}
44 template<typename Pointer> static void copy(Pointer,Pointer){}
45 template<typename Pointer> static void rotate_left(Pointer,Pointer){}
46 template<typename Pointer> static void rotate_right(Pointer,Pointer){}
48 #if defined(BOOST_MULTI_INDEX_ENABLE_INVARIANT_CHECKING)
51 template<typename Pointer> static bool invariant(Pointer){return true;}
56 } /* namespace multi_index::detail */
58 /* ordered_index specifiers */
60 template<typename Arg1,typename Arg2,typename Arg3>
63 typedef typename detail::ordered_index_args<
64 Arg1,Arg2,Arg3> index_args;
65 typedef typename index_args::tag_list_type::type tag_list_type;
66 typedef typename index_args::key_from_value_type key_from_value_type;
67 typedef typename index_args::compare_type compare_type;
69 template<typename Super>
72 typedef detail::ordered_index_node<detail::null_augment_policy,Super> type;
75 template<typename SuperMeta>
78 typedef detail::ordered_index<
79 key_from_value_type,compare_type,
80 SuperMeta,tag_list_type,detail::ordered_unique_tag,
81 detail::null_augment_policy> type;
85 template<typename Arg1,typename Arg2,typename Arg3>
86 struct ordered_non_unique
88 typedef detail::ordered_index_args<
89 Arg1,Arg2,Arg3> index_args;
90 typedef typename index_args::tag_list_type::type tag_list_type;
91 typedef typename index_args::key_from_value_type key_from_value_type;
92 typedef typename index_args::compare_type compare_type;
94 template<typename Super>
97 typedef detail::ordered_index_node<detail::null_augment_policy,Super> type;
100 template<typename SuperMeta>
103 typedef detail::ordered_index<
104 key_from_value_type,compare_type,
105 SuperMeta,tag_list_type,detail::ordered_non_unique_tag,
106 detail::null_augment_policy> type;
110 } /* namespace multi_index */
112 } /* namespace boost */