Chris@16
|
1 //////////////////////////////////////////////////////////////////////////////
|
Chris@16
|
2 //
|
Chris@101
|
3 // (C) Copyright Ion Gaztanaga 2005-2014. Distributed under the Boost
|
Chris@16
|
4 // Software License, Version 1.0. (See accompanying file
|
Chris@16
|
5 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
Chris@16
|
6 //
|
Chris@16
|
7 // See http://www.boost.org/libs/container for documentation.
|
Chris@16
|
8 //
|
Chris@16
|
9 //////////////////////////////////////////////////////////////////////////////
|
Chris@16
|
10
|
Chris@16
|
11 #ifndef BOOST_CONTAINER_CONTAINER_FWD_HPP
|
Chris@16
|
12 #define BOOST_CONTAINER_CONTAINER_FWD_HPP
|
Chris@16
|
13
|
Chris@101
|
14 #ifndef BOOST_CONFIG_HPP
|
Chris@101
|
15 # include <boost/config.hpp>
|
Chris@101
|
16 #endif
|
Chris@101
|
17
|
Chris@101
|
18 #if defined(BOOST_HAS_PRAGMA_ONCE)
|
Chris@16
|
19 # pragma once
|
Chris@16
|
20 #endif
|
Chris@16
|
21
|
Chris@101
|
22 //! \file
|
Chris@101
|
23 //! This header file forward declares the following containers:
|
Chris@101
|
24 //! - boost::container::vector
|
Chris@101
|
25 //! - boost::container::stable_vector
|
Chris@101
|
26 //! - boost::container::static_vector
|
Chris@101
|
27 //! - boost::container::slist
|
Chris@101
|
28 //! - boost::container::list
|
Chris@101
|
29 //! - boost::container::set
|
Chris@101
|
30 //! - boost::container::multiset
|
Chris@101
|
31 //! - boost::container::map
|
Chris@101
|
32 //! - boost::container::multimap
|
Chris@101
|
33 //! - boost::container::flat_set
|
Chris@101
|
34 //! - boost::container::flat_multiset
|
Chris@101
|
35 //! - boost::container::flat_map
|
Chris@101
|
36 //! - boost::container::flat_multimap
|
Chris@101
|
37 //! - boost::container::basic_string
|
Chris@101
|
38 //! - boost::container::string
|
Chris@101
|
39 //! - boost::container::wstring
|
Chris@101
|
40 //!
|
Chris@101
|
41 //! It forward declares the following allocators:
|
Chris@101
|
42 //! - boost::container::allocator
|
Chris@101
|
43 //! - boost::container::node_allocator
|
Chris@101
|
44 //! - boost::container::adaptive_pool
|
Chris@101
|
45 //!
|
Chris@101
|
46 //! And finally it defines the following types
|
Chris@16
|
47
|
Chris@101
|
48 #ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
|
Chris@101
|
49
|
Chris@101
|
50 //Std forward declarations
|
Chris@101
|
51 #ifndef BOOST_CONTAINER_DETAIL_STD_FWD_HPP
|
Chris@101
|
52 #include <boost/container/detail/std_fwd.hpp>
|
Chris@101
|
53 #endif
|
Chris@16
|
54
|
Chris@16
|
55 namespace boost{
|
Chris@16
|
56 namespace intrusive{
|
Chris@16
|
57 //Create namespace to avoid compilation errors
|
Chris@16
|
58 }}
|
Chris@16
|
59
|
Chris@16
|
60 namespace boost{ namespace container{ namespace container_detail{
|
Chris@101
|
61 namespace bi = boost::intrusive;
|
Chris@16
|
62 }}}
|
Chris@16
|
63
|
Chris@101
|
64 #include <cstddef>
|
Chris@16
|
65
|
Chris@101
|
66 #endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
|
Chris@16
|
67
|
Chris@16
|
68 //////////////////////////////////////////////////////////////////////////////
|
Chris@16
|
69 // Containers
|
Chris@16
|
70 //////////////////////////////////////////////////////////////////////////////
|
Chris@16
|
71
|
Chris@16
|
72 namespace boost {
|
Chris@16
|
73 namespace container {
|
Chris@16
|
74
|
Chris@101
|
75 //! Enumeration used to configure ordered associative containers
|
Chris@101
|
76 //! with a concrete tree implementation.
|
Chris@101
|
77 enum tree_type_enum
|
Chris@101
|
78 {
|
Chris@101
|
79 red_black_tree,
|
Chris@101
|
80 avl_tree,
|
Chris@101
|
81 scapegoat_tree,
|
Chris@101
|
82 splay_tree
|
Chris@101
|
83 };
|
Chris@101
|
84
|
Chris@101
|
85 #ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
|
Chris@101
|
86
|
Chris@101
|
87 template<class T>
|
Chris@101
|
88 class new_allocator;
|
Chris@101
|
89
|
Chris@16
|
90 template <class T
|
Chris@101
|
91 ,class Allocator = new_allocator<T> >
|
Chris@16
|
92 class vector;
|
Chris@16
|
93
|
Chris@16
|
94 template <class T
|
Chris@101
|
95 ,class Allocator = new_allocator<T> >
|
Chris@16
|
96 class stable_vector;
|
Chris@16
|
97
|
Chris@101
|
98 template <class T, std::size_t Capacity>
|
Chris@101
|
99 class static_vector;
|
Chris@101
|
100
|
Chris@101
|
101 template < class T, std::size_t N
|
Chris@101
|
102 , class Allocator= new_allocator<T> >
|
Chris@101
|
103 class small_vector;
|
Chris@101
|
104
|
Chris@16
|
105 template <class T
|
Chris@101
|
106 ,class Allocator = new_allocator<T> >
|
Chris@16
|
107 class deque;
|
Chris@16
|
108
|
Chris@16
|
109 template <class T
|
Chris@101
|
110 ,class Allocator = new_allocator<T> >
|
Chris@16
|
111 class list;
|
Chris@16
|
112
|
Chris@16
|
113 template <class T
|
Chris@101
|
114 ,class Allocator = new_allocator<T> >
|
Chris@16
|
115 class slist;
|
Chris@16
|
116
|
Chris@101
|
117 template<tree_type_enum TreeType, bool OptimizeSize>
|
Chris@101
|
118 struct tree_opt;
|
Chris@101
|
119
|
Chris@101
|
120 typedef tree_opt<red_black_tree, true> tree_assoc_defaults;
|
Chris@101
|
121
|
Chris@16
|
122 template <class Key
|
Chris@16
|
123 ,class Compare = std::less<Key>
|
Chris@101
|
124 ,class Allocator = new_allocator<Key>
|
Chris@101
|
125 ,class Options = tree_assoc_defaults >
|
Chris@16
|
126 class set;
|
Chris@16
|
127
|
Chris@16
|
128 template <class Key
|
Chris@16
|
129 ,class Compare = std::less<Key>
|
Chris@101
|
130 ,class Allocator = new_allocator<Key>
|
Chris@101
|
131 ,class Options = tree_assoc_defaults >
|
Chris@16
|
132 class multiset;
|
Chris@16
|
133
|
Chris@16
|
134 template <class Key
|
Chris@16
|
135 ,class T
|
Chris@16
|
136 ,class Compare = std::less<Key>
|
Chris@101
|
137 ,class Allocator = new_allocator<std::pair<const Key, T> >
|
Chris@101
|
138 ,class Options = tree_assoc_defaults >
|
Chris@16
|
139 class map;
|
Chris@16
|
140
|
Chris@16
|
141 template <class Key
|
Chris@16
|
142 ,class T
|
Chris@16
|
143 ,class Compare = std::less<Key>
|
Chris@101
|
144 ,class Allocator = new_allocator<std::pair<const Key, T> >
|
Chris@101
|
145 ,class Options = tree_assoc_defaults >
|
Chris@16
|
146 class multimap;
|
Chris@16
|
147
|
Chris@16
|
148 template <class Key
|
Chris@16
|
149 ,class Compare = std::less<Key>
|
Chris@101
|
150 ,class Allocator = new_allocator<Key> >
|
Chris@16
|
151 class flat_set;
|
Chris@16
|
152
|
Chris@16
|
153 template <class Key
|
Chris@16
|
154 ,class Compare = std::less<Key>
|
Chris@101
|
155 ,class Allocator = new_allocator<Key> >
|
Chris@16
|
156 class flat_multiset;
|
Chris@16
|
157
|
Chris@16
|
158 template <class Key
|
Chris@16
|
159 ,class T
|
Chris@16
|
160 ,class Compare = std::less<Key>
|
Chris@101
|
161 ,class Allocator = new_allocator<std::pair<Key, T> > >
|
Chris@16
|
162 class flat_map;
|
Chris@16
|
163
|
Chris@16
|
164 template <class Key
|
Chris@16
|
165 ,class T
|
Chris@16
|
166 ,class Compare = std::less<Key>
|
Chris@101
|
167 ,class Allocator = new_allocator<std::pair<Key, T> > >
|
Chris@16
|
168 class flat_multimap;
|
Chris@16
|
169
|
Chris@16
|
170 template <class CharT
|
Chris@16
|
171 ,class Traits = std::char_traits<CharT>
|
Chris@101
|
172 ,class Allocator = new_allocator<CharT> >
|
Chris@16
|
173 class basic_string;
|
Chris@16
|
174
|
Chris@101
|
175 typedef basic_string
|
Chris@101
|
176 <char
|
Chris@101
|
177 ,std::char_traits<char>
|
Chris@101
|
178 ,new_allocator<char> >
|
Chris@101
|
179 string;
|
Chris@101
|
180
|
Chris@101
|
181 typedef basic_string
|
Chris@101
|
182 <wchar_t
|
Chris@101
|
183 ,std::char_traits<wchar_t>
|
Chris@101
|
184 ,new_allocator<wchar_t> >
|
Chris@101
|
185 wstring;
|
Chris@101
|
186
|
Chris@101
|
187 static const std::size_t ADP_nodes_per_block = 256u;
|
Chris@101
|
188 static const std::size_t ADP_max_free_blocks = 2u;
|
Chris@101
|
189 static const std::size_t ADP_overhead_percent = 1u;
|
Chris@101
|
190 static const std::size_t ADP_only_alignment = 0u;
|
Chris@101
|
191
|
Chris@101
|
192 template < class T
|
Chris@101
|
193 , std::size_t NodesPerBlock = ADP_nodes_per_block
|
Chris@101
|
194 , std::size_t MaxFreeBlocks = ADP_max_free_blocks
|
Chris@101
|
195 , std::size_t OverheadPercent = ADP_overhead_percent
|
Chris@101
|
196 , unsigned Version = 2
|
Chris@101
|
197 >
|
Chris@101
|
198 class adaptive_pool;
|
Chris@101
|
199
|
Chris@101
|
200 template < class T
|
Chris@101
|
201 , unsigned Version = 2
|
Chris@101
|
202 , unsigned int AllocationDisableMask = 0>
|
Chris@101
|
203 class allocator;
|
Chris@101
|
204
|
Chris@101
|
205 static const std::size_t NodeAlloc_nodes_per_block = 256u;
|
Chris@101
|
206
|
Chris@101
|
207 template
|
Chris@101
|
208 < class T
|
Chris@101
|
209 , std::size_t NodesPerBlock = NodeAlloc_nodes_per_block
|
Chris@101
|
210 , std::size_t Version = 2>
|
Chris@101
|
211 class node_allocator;
|
Chris@101
|
212
|
Chris@101
|
213 #else
|
Chris@101
|
214
|
Chris@101
|
215 //! Default options for tree-based associative containers
|
Chris@101
|
216 //! - tree_type<red_black_tree>
|
Chris@101
|
217 //! - optimize_size<true>
|
Chris@101
|
218 typedef implementation_defined tree_assoc_defaults;
|
Chris@101
|
219
|
Chris@101
|
220 #endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
|
Chris@101
|
221
|
Chris@16
|
222 //! Type used to tag that the input range is
|
Chris@16
|
223 //! guaranteed to be ordered
|
Chris@16
|
224 struct ordered_range_t
|
Chris@16
|
225 {};
|
Chris@16
|
226
|
Chris@16
|
227 //! Value used to tag that the input range is
|
Chris@16
|
228 //! guaranteed to be ordered
|
Chris@16
|
229 static const ordered_range_t ordered_range = ordered_range_t();
|
Chris@16
|
230
|
Chris@16
|
231 //! Type used to tag that the input range is
|
Chris@16
|
232 //! guaranteed to be ordered and unique
|
Chris@16
|
233 struct ordered_unique_range_t
|
Chris@16
|
234 : public ordered_range_t
|
Chris@16
|
235 {};
|
Chris@16
|
236
|
Chris@16
|
237 //! Value used to tag that the input range is
|
Chris@16
|
238 //! guaranteed to be ordered and unique
|
Chris@16
|
239 static const ordered_unique_range_t ordered_unique_range = ordered_unique_range_t();
|
Chris@16
|
240
|
Chris@101
|
241 //! Type used to tag that the inserted values
|
Chris@101
|
242 //! should be default initialized
|
Chris@16
|
243 struct default_init_t
|
Chris@16
|
244 {};
|
Chris@16
|
245
|
Chris@101
|
246 //! Value used to tag that the inserted values
|
Chris@101
|
247 //! should be default initialized
|
Chris@16
|
248 static const default_init_t default_init = default_init_t();
|
Chris@101
|
249 #ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
|
Chris@16
|
250
|
Chris@101
|
251 //! Type used to tag that the inserted values
|
Chris@101
|
252 //! should be value initialized
|
Chris@101
|
253 struct value_init_t
|
Chris@101
|
254 {};
|
Chris@101
|
255
|
Chris@101
|
256 //! Value used to tag that the inserted values
|
Chris@101
|
257 //! should be value initialized
|
Chris@101
|
258 static const value_init_t value_init = value_init_t();
|
Chris@101
|
259
|
Chris@101
|
260 namespace container_detail_really_deep_namespace {
|
Chris@16
|
261
|
Chris@16
|
262 //Otherwise, gcc issues a warning of previously defined
|
Chris@16
|
263 //anonymous_instance and unique_instance
|
Chris@16
|
264 struct dummy
|
Chris@16
|
265 {
|
Chris@16
|
266 dummy()
|
Chris@16
|
267 {
|
Chris@16
|
268 (void)ordered_range;
|
Chris@16
|
269 (void)ordered_unique_range;
|
Chris@16
|
270 (void)default_init;
|
Chris@16
|
271 }
|
Chris@16
|
272 };
|
Chris@16
|
273
|
Chris@16
|
274 } //detail_really_deep_namespace {
|
Chris@16
|
275
|
Chris@101
|
276
|
Chris@101
|
277 #endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
|
Chris@16
|
278
|
Chris@16
|
279 }} //namespace boost { namespace container {
|
Chris@16
|
280
|
Chris@16
|
281 #endif //#ifndef BOOST_CONTAINER_CONTAINER_FWD_HPP
|