Chris@102
|
1 /////////////////////////////////////////////////////////////////////////////
|
Chris@102
|
2 //
|
Chris@102
|
3 // (C) Copyright Ion Gaztanaga 2013-2013
|
Chris@102
|
4 //
|
Chris@102
|
5 // Distributed under the Boost Software License, Version 1.0.
|
Chris@102
|
6 // (See accompanying file LICENSE_1_0.txt or copy at
|
Chris@102
|
7 // http://www.boost.org/LICENSE_1_0.txt)
|
Chris@102
|
8 //
|
Chris@102
|
9 // See http://www.boost.org/libs/container for documentation.
|
Chris@102
|
10 //
|
Chris@102
|
11 /////////////////////////////////////////////////////////////////////////////
|
Chris@102
|
12
|
Chris@102
|
13 #ifndef BOOST_CONTAINER_OPTIONS_HPP
|
Chris@102
|
14 #define BOOST_CONTAINER_OPTIONS_HPP
|
Chris@102
|
15
|
Chris@102
|
16 #ifndef BOOST_CONFIG_HPP
|
Chris@102
|
17 # include <boost/config.hpp>
|
Chris@102
|
18 #endif
|
Chris@102
|
19
|
Chris@102
|
20 #if defined(BOOST_HAS_PRAGMA_ONCE)
|
Chris@102
|
21 # pragma once
|
Chris@102
|
22 #endif
|
Chris@102
|
23
|
Chris@102
|
24 #include <boost/container/detail/config_begin.hpp>
|
Chris@102
|
25 #include <boost/container/container_fwd.hpp>
|
Chris@102
|
26 #include <boost/intrusive/pack_options.hpp>
|
Chris@102
|
27
|
Chris@102
|
28 namespace boost {
|
Chris@102
|
29 namespace container {
|
Chris@102
|
30
|
Chris@102
|
31 #if !defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
|
Chris@102
|
32
|
Chris@102
|
33 template<tree_type_enum TreeType, bool OptimizeSize>
|
Chris@102
|
34 struct tree_opt
|
Chris@102
|
35 {
|
Chris@102
|
36 static const boost::container::tree_type_enum tree_type = TreeType;
|
Chris@102
|
37 static const bool optimize_size = OptimizeSize;
|
Chris@102
|
38 };
|
Chris@102
|
39
|
Chris@102
|
40 #endif //!defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
|
Chris@102
|
41
|
Chris@102
|
42 //!This option setter specifies the underlying tree type
|
Chris@102
|
43 //!(red-black, AVL, Scapegoat or Splay) for ordered associative containers
|
Chris@102
|
44 BOOST_INTRUSIVE_OPTION_CONSTANT(tree_type, tree_type_enum, TreeType, tree_type)
|
Chris@102
|
45
|
Chris@102
|
46 //!This option setter specifies if node size is optimized
|
Chris@102
|
47 //!storing rebalancing data masked into pointers for ordered associative containers
|
Chris@102
|
48 BOOST_INTRUSIVE_OPTION_CONSTANT(optimize_size, bool, Enabled, optimize_size)
|
Chris@102
|
49
|
Chris@102
|
50 //! Helper metafunction to combine options into a single type to be used
|
Chris@102
|
51 //! by \c boost::container::set, \c boost::container::multiset
|
Chris@102
|
52 //! \c boost::container::map and \c boost::container::multimap.
|
Chris@102
|
53 //! Supported options are: \c boost::container::optimize_size and \c boost::container::tree_type
|
Chris@102
|
54 #if defined(BOOST_CONTAINER_DOXYGEN_INVOKED) || defined(BOOST_CONTAINER_VARIADIC_TEMPLATES)
|
Chris@102
|
55 template<class ...Options>
|
Chris@102
|
56 #else
|
Chris@102
|
57 template<class O1 = void, class O2 = void, class O3 = void, class O4 = void>
|
Chris@102
|
58 #endif
|
Chris@102
|
59 struct tree_assoc_options
|
Chris@102
|
60 {
|
Chris@102
|
61 /// @cond
|
Chris@102
|
62 typedef typename ::boost::intrusive::pack_options
|
Chris@102
|
63 < tree_assoc_defaults,
|
Chris@102
|
64 #if !defined(BOOST_CONTAINER_VARIADIC_TEMPLATES)
|
Chris@102
|
65 O1, O2, O3, O4
|
Chris@102
|
66 #else
|
Chris@102
|
67 Options...
|
Chris@102
|
68 #endif
|
Chris@102
|
69 >::type packed_options;
|
Chris@102
|
70 typedef tree_opt<packed_options::tree_type, packed_options::optimize_size> implementation_defined;
|
Chris@102
|
71 /// @endcond
|
Chris@102
|
72 typedef implementation_defined type;
|
Chris@102
|
73 };
|
Chris@102
|
74
|
Chris@102
|
75 } //namespace container {
|
Chris@102
|
76 } //namespace boost {
|
Chris@102
|
77
|
Chris@102
|
78 #include <boost/container/detail/config_end.hpp>
|
Chris@102
|
79
|
Chris@102
|
80 #endif //#ifndef BOOST_CONTAINER_OPTIONS_HPP
|