Chris@16
|
1 //////////////////////////////////////////////////////////////////////////////
|
Chris@16
|
2 //
|
Chris@16
|
3 // (C) Copyright Ion Gaztanaga 2005-2012. 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/interprocess for documentation.
|
Chris@16
|
8 //
|
Chris@16
|
9 //////////////////////////////////////////////////////////////////////////////
|
Chris@16
|
10
|
Chris@16
|
11 #ifndef BOOST_INTERPROCESS_FWD_HPP
|
Chris@16
|
12 #define BOOST_INTERPROCESS_FWD_HPP
|
Chris@16
|
13
|
Chris@16
|
14 #if defined (_MSC_VER) && (_MSC_VER >= 1200)
|
Chris@16
|
15 # pragma once
|
Chris@16
|
16 #endif
|
Chris@16
|
17
|
Chris@16
|
18 #include <boost/interprocess/detail/config_begin.hpp>
|
Chris@16
|
19 #include <boost/interprocess/detail/workaround.hpp>
|
Chris@16
|
20
|
Chris@16
|
21 #include <cstddef>
|
Chris@16
|
22
|
Chris@16
|
23 //////////////////////////////////////////////////////////////////////////////
|
Chris@16
|
24 // Standard predeclarations
|
Chris@16
|
25 //////////////////////////////////////////////////////////////////////////////
|
Chris@16
|
26
|
Chris@16
|
27 /// @cond
|
Chris@16
|
28
|
Chris@16
|
29 namespace boost{
|
Chris@16
|
30 namespace intrusive{
|
Chris@16
|
31 }}
|
Chris@16
|
32
|
Chris@16
|
33 namespace boost{
|
Chris@16
|
34 namespace interprocess{
|
Chris@16
|
35 namespace bi = boost::intrusive;
|
Chris@16
|
36 }}
|
Chris@16
|
37
|
Chris@16
|
38 #include <utility>
|
Chris@16
|
39 #include <memory>
|
Chris@16
|
40 #include <functional>
|
Chris@16
|
41 #include <iosfwd>
|
Chris@16
|
42 #include <string>
|
Chris@16
|
43
|
Chris@16
|
44 /// @endcond
|
Chris@16
|
45
|
Chris@16
|
46 namespace boost { namespace interprocess {
|
Chris@16
|
47
|
Chris@16
|
48 //////////////////////////////////////////////////////////////////////////////
|
Chris@16
|
49 // permissions
|
Chris@16
|
50 //////////////////////////////////////////////////////////////////////////////
|
Chris@16
|
51
|
Chris@16
|
52 class permissions;
|
Chris@16
|
53
|
Chris@16
|
54 //////////////////////////////////////////////////////////////////////////////
|
Chris@16
|
55 // shared_memory
|
Chris@16
|
56 //////////////////////////////////////////////////////////////////////////////
|
Chris@16
|
57
|
Chris@16
|
58 class shared_memory_object;
|
Chris@16
|
59
|
Chris@16
|
60 #if defined (BOOST_INTERPROCESS_WINDOWS) || defined(BOOST_INTERPROCESS_DOXYGEN_INVOKED)
|
Chris@16
|
61 class windows_shared_memory;
|
Chris@16
|
62 #endif //#if defined (BOOST_INTERPROCESS_WINDOWS)
|
Chris@16
|
63
|
Chris@16
|
64 //////////////////////////////////////////////////////////////////////////////
|
Chris@16
|
65 // mapped file/mapped region/mapped_file
|
Chris@16
|
66 //////////////////////////////////////////////////////////////////////////////
|
Chris@16
|
67
|
Chris@16
|
68 class file_mapping;
|
Chris@16
|
69 class mapped_region;
|
Chris@16
|
70 class mapped_file;
|
Chris@16
|
71
|
Chris@16
|
72 //////////////////////////////////////////////////////////////////////////////
|
Chris@16
|
73 // Mutexes
|
Chris@16
|
74 //////////////////////////////////////////////////////////////////////////////
|
Chris@16
|
75
|
Chris@16
|
76 class null_mutex;
|
Chris@16
|
77
|
Chris@16
|
78 class interprocess_mutex;
|
Chris@16
|
79 class interprocess_recursive_mutex;
|
Chris@16
|
80
|
Chris@16
|
81 class named_mutex;
|
Chris@16
|
82 class named_recursive_mutex;
|
Chris@16
|
83
|
Chris@16
|
84 class interprocess_semaphore;
|
Chris@16
|
85 class named_semaphore;
|
Chris@16
|
86
|
Chris@16
|
87 //////////////////////////////////////////////////////////////////////////////
|
Chris@16
|
88 // Mutex families
|
Chris@16
|
89 //////////////////////////////////////////////////////////////////////////////
|
Chris@16
|
90
|
Chris@16
|
91 struct mutex_family;
|
Chris@16
|
92 struct null_mutex_family;
|
Chris@16
|
93
|
Chris@16
|
94 //////////////////////////////////////////////////////////////////////////////
|
Chris@16
|
95 // Other synchronization classes
|
Chris@16
|
96 //////////////////////////////////////////////////////////////////////////////
|
Chris@16
|
97
|
Chris@16
|
98 class barrier;
|
Chris@16
|
99 class interprocess_sharable_mutex;
|
Chris@16
|
100 class interprocess_condition;
|
Chris@16
|
101
|
Chris@16
|
102 //////////////////////////////////////////////////////////////////////////////
|
Chris@16
|
103 // Locks
|
Chris@16
|
104 //////////////////////////////////////////////////////////////////////////////
|
Chris@16
|
105
|
Chris@16
|
106 template <class Mutex>
|
Chris@16
|
107 class scoped_lock;
|
Chris@16
|
108
|
Chris@16
|
109 template <class SharableMutex>
|
Chris@16
|
110 class sharable_lock;
|
Chris@16
|
111
|
Chris@16
|
112 template <class UpgradableMutex>
|
Chris@16
|
113 class upgradable_lock;
|
Chris@16
|
114
|
Chris@16
|
115 //////////////////////////////////////////////////////////////////////////////
|
Chris@16
|
116 // STL compatible allocators
|
Chris@16
|
117 //////////////////////////////////////////////////////////////////////////////
|
Chris@16
|
118
|
Chris@16
|
119 template<class T, class SegmentManager>
|
Chris@16
|
120 class allocator;
|
Chris@16
|
121
|
Chris@16
|
122 template<class T, class SegmentManager, std::size_t NodesPerBlock = 64>
|
Chris@16
|
123 class node_allocator;
|
Chris@16
|
124
|
Chris@16
|
125 template<class T, class SegmentManager, std::size_t NodesPerBlock = 64>
|
Chris@16
|
126 class private_node_allocator;
|
Chris@16
|
127
|
Chris@16
|
128 template<class T, class SegmentManager, std::size_t NodesPerBlock = 64>
|
Chris@16
|
129 class cached_node_allocator;
|
Chris@16
|
130
|
Chris@16
|
131 template<class T, class SegmentManager, std::size_t NodesPerBlock = 64, std::size_t MaxFreeBlocks = 2
|
Chris@16
|
132 , unsigned char OverheadPercent = 5
|
Chris@16
|
133 >
|
Chris@16
|
134 class adaptive_pool;
|
Chris@16
|
135
|
Chris@16
|
136 template<class T, class SegmentManager, std::size_t NodesPerBlock = 64, std::size_t MaxFreeBlocks = 2
|
Chris@16
|
137 , unsigned char OverheadPercent = 5
|
Chris@16
|
138 >
|
Chris@16
|
139 class private_adaptive_pool;
|
Chris@16
|
140
|
Chris@16
|
141 template<class T, class SegmentManager, std::size_t NodesPerBlock = 64, std::size_t MaxFreeBlocks = 2
|
Chris@16
|
142 , unsigned char OverheadPercent = 5
|
Chris@16
|
143 >
|
Chris@16
|
144 class cached_adaptive_pool;
|
Chris@16
|
145
|
Chris@16
|
146
|
Chris@16
|
147 //////////////////////////////////////////////////////////////////////////////
|
Chris@16
|
148 // offset_ptr
|
Chris@16
|
149 //////////////////////////////////////////////////////////////////////////////
|
Chris@16
|
150
|
Chris@16
|
151 static const std::size_t offset_type_alignment = 0;
|
Chris@16
|
152
|
Chris@16
|
153 template <class T, class DifferenceType = std::ptrdiff_t, class OffsetType = std::size_t, std::size_t Alignment = offset_type_alignment>
|
Chris@16
|
154 class offset_ptr;
|
Chris@16
|
155
|
Chris@16
|
156 //////////////////////////////////////////////////////////////////////////////
|
Chris@16
|
157 // Memory allocation algorithms
|
Chris@16
|
158 //////////////////////////////////////////////////////////////////////////////
|
Chris@16
|
159
|
Chris@16
|
160 //Single segment memory allocation algorithms
|
Chris@16
|
161 template<class MutexFamily, class VoidMutex = offset_ptr<void> >
|
Chris@16
|
162 class simple_seq_fit;
|
Chris@16
|
163
|
Chris@16
|
164 template<class MutexFamily, class VoidMutex = offset_ptr<void>, std::size_t MemAlignment = 0>
|
Chris@16
|
165 class rbtree_best_fit;
|
Chris@16
|
166
|
Chris@16
|
167 //////////////////////////////////////////////////////////////////////////////
|
Chris@16
|
168 // Index Types
|
Chris@16
|
169 //////////////////////////////////////////////////////////////////////////////
|
Chris@16
|
170
|
Chris@16
|
171 template<class IndexConfig> class flat_map_index;
|
Chris@16
|
172 template<class IndexConfig> class iset_index;
|
Chris@16
|
173 template<class IndexConfig> class iunordered_set_index;
|
Chris@16
|
174 template<class IndexConfig> class map_index;
|
Chris@16
|
175 template<class IndexConfig> class null_index;
|
Chris@16
|
176 template<class IndexConfig> class unordered_map_index;
|
Chris@16
|
177
|
Chris@16
|
178 //////////////////////////////////////////////////////////////////////////////
|
Chris@16
|
179 // Segment manager
|
Chris@16
|
180 //////////////////////////////////////////////////////////////////////////////
|
Chris@16
|
181
|
Chris@16
|
182 template <class CharType
|
Chris@16
|
183 ,class MemoryAlgorithm
|
Chris@16
|
184 ,template<class IndexConfig> class IndexType>
|
Chris@16
|
185 class segment_manager;
|
Chris@16
|
186
|
Chris@16
|
187 //////////////////////////////////////////////////////////////////////////////
|
Chris@16
|
188 // External buffer managed memory classes
|
Chris@16
|
189 //////////////////////////////////////////////////////////////////////////////
|
Chris@16
|
190
|
Chris@16
|
191 template <class CharType
|
Chris@16
|
192 ,class MemoryAlgorithm
|
Chris@16
|
193 ,template<class IndexConfig> class IndexType>
|
Chris@16
|
194 class basic_managed_external_buffer;
|
Chris@16
|
195
|
Chris@16
|
196 typedef basic_managed_external_buffer
|
Chris@16
|
197 <char
|
Chris@16
|
198 ,rbtree_best_fit<null_mutex_family>
|
Chris@16
|
199 ,iset_index>
|
Chris@16
|
200 managed_external_buffer;
|
Chris@16
|
201
|
Chris@16
|
202 typedef basic_managed_external_buffer
|
Chris@16
|
203 <wchar_t
|
Chris@16
|
204 ,rbtree_best_fit<null_mutex_family>
|
Chris@16
|
205 ,iset_index>
|
Chris@16
|
206 wmanaged_external_buffer;
|
Chris@16
|
207
|
Chris@16
|
208 //////////////////////////////////////////////////////////////////////////////
|
Chris@16
|
209 // managed memory classes
|
Chris@16
|
210 //////////////////////////////////////////////////////////////////////////////
|
Chris@16
|
211
|
Chris@16
|
212 template <class CharType
|
Chris@16
|
213 ,class MemoryAlgorithm
|
Chris@16
|
214 ,template<class IndexConfig> class IndexType>
|
Chris@16
|
215 class basic_managed_shared_memory;
|
Chris@16
|
216
|
Chris@16
|
217 typedef basic_managed_shared_memory
|
Chris@16
|
218 <char
|
Chris@16
|
219 ,rbtree_best_fit<mutex_family>
|
Chris@16
|
220 ,iset_index>
|
Chris@16
|
221 managed_shared_memory;
|
Chris@16
|
222
|
Chris@16
|
223 typedef basic_managed_shared_memory
|
Chris@16
|
224 <wchar_t
|
Chris@16
|
225 ,rbtree_best_fit<mutex_family>
|
Chris@16
|
226 ,iset_index>
|
Chris@16
|
227 wmanaged_shared_memory;
|
Chris@16
|
228
|
Chris@16
|
229
|
Chris@16
|
230 //////////////////////////////////////////////////////////////////////////////
|
Chris@16
|
231 // Windows shared memory managed memory classes
|
Chris@16
|
232 //////////////////////////////////////////////////////////////////////////////
|
Chris@16
|
233
|
Chris@16
|
234 #if defined (BOOST_INTERPROCESS_WINDOWS) || defined(BOOST_INTERPROCESS_DOXYGEN_INVOKED)
|
Chris@16
|
235
|
Chris@16
|
236 template <class CharType
|
Chris@16
|
237 ,class MemoryAlgorithm
|
Chris@16
|
238 ,template<class IndexConfig> class IndexType>
|
Chris@16
|
239 class basic_managed_windows_shared_memory;
|
Chris@16
|
240
|
Chris@16
|
241 typedef basic_managed_windows_shared_memory
|
Chris@16
|
242 <char
|
Chris@16
|
243 ,rbtree_best_fit<mutex_family>
|
Chris@16
|
244 ,iset_index>
|
Chris@16
|
245 managed_windows_shared_memory;
|
Chris@16
|
246
|
Chris@16
|
247 typedef basic_managed_windows_shared_memory
|
Chris@16
|
248 <wchar_t
|
Chris@16
|
249 ,rbtree_best_fit<mutex_family>
|
Chris@16
|
250 ,iset_index>
|
Chris@16
|
251 wmanaged_windows_shared_memory;
|
Chris@16
|
252
|
Chris@16
|
253 #endif //#if defined (BOOST_INTERPROCESS_WINDOWS)
|
Chris@16
|
254
|
Chris@16
|
255 #if defined(BOOST_INTERPROCESS_XSI_SHARED_MEMORY_OBJECTS) || defined(BOOST_INTERPROCESS_DOXYGEN_INVOKED)
|
Chris@16
|
256
|
Chris@16
|
257 template <class CharType
|
Chris@16
|
258 ,class MemoryAlgorithm
|
Chris@16
|
259 ,template<class IndexConfig> class IndexType>
|
Chris@16
|
260 class basic_managed_xsi_shared_memory;
|
Chris@16
|
261
|
Chris@16
|
262 typedef basic_managed_xsi_shared_memory
|
Chris@16
|
263 <char
|
Chris@16
|
264 ,rbtree_best_fit<mutex_family>
|
Chris@16
|
265 ,iset_index>
|
Chris@16
|
266 managed_xsi_shared_memory;
|
Chris@16
|
267
|
Chris@16
|
268 typedef basic_managed_xsi_shared_memory
|
Chris@16
|
269 <wchar_t
|
Chris@16
|
270 ,rbtree_best_fit<mutex_family>
|
Chris@16
|
271 ,iset_index>
|
Chris@16
|
272 wmanaged_xsi_shared_memory;
|
Chris@16
|
273
|
Chris@16
|
274 #endif //#if defined(BOOST_INTERPROCESS_XSI_SHARED_MEMORY_OBJECTS)
|
Chris@16
|
275
|
Chris@16
|
276 //////////////////////////////////////////////////////////////////////////////
|
Chris@16
|
277 // Fixed address shared memory
|
Chris@16
|
278 //////////////////////////////////////////////////////////////////////////////
|
Chris@16
|
279
|
Chris@16
|
280 typedef basic_managed_shared_memory
|
Chris@16
|
281 <char
|
Chris@16
|
282 ,rbtree_best_fit<mutex_family, void*>
|
Chris@16
|
283 ,iset_index>
|
Chris@16
|
284 fixed_managed_shared_memory;
|
Chris@16
|
285
|
Chris@16
|
286 typedef basic_managed_shared_memory
|
Chris@16
|
287 <wchar_t
|
Chris@16
|
288 ,rbtree_best_fit<mutex_family, void*>
|
Chris@16
|
289 ,iset_index>
|
Chris@16
|
290 wfixed_managed_shared_memory;
|
Chris@16
|
291
|
Chris@16
|
292 //////////////////////////////////////////////////////////////////////////////
|
Chris@16
|
293 // Heap memory managed memory classes
|
Chris@16
|
294 //////////////////////////////////////////////////////////////////////////////
|
Chris@16
|
295
|
Chris@16
|
296 template
|
Chris@16
|
297 <class CharType
|
Chris@16
|
298 ,class MemoryAlgorithm
|
Chris@16
|
299 ,template<class IndexConfig> class IndexType>
|
Chris@16
|
300 class basic_managed_heap_memory;
|
Chris@16
|
301
|
Chris@16
|
302 typedef basic_managed_heap_memory
|
Chris@16
|
303 <char
|
Chris@16
|
304 ,rbtree_best_fit<null_mutex_family>
|
Chris@16
|
305 ,iset_index>
|
Chris@16
|
306 managed_heap_memory;
|
Chris@16
|
307
|
Chris@16
|
308 typedef basic_managed_heap_memory
|
Chris@16
|
309 <wchar_t
|
Chris@16
|
310 ,rbtree_best_fit<null_mutex_family>
|
Chris@16
|
311 ,iset_index>
|
Chris@16
|
312 wmanaged_heap_memory;
|
Chris@16
|
313
|
Chris@16
|
314 //////////////////////////////////////////////////////////////////////////////
|
Chris@16
|
315 // Mapped file managed memory classes
|
Chris@16
|
316 //////////////////////////////////////////////////////////////////////////////
|
Chris@16
|
317
|
Chris@16
|
318 template
|
Chris@16
|
319 <class CharType
|
Chris@16
|
320 ,class MemoryAlgorithm
|
Chris@16
|
321 ,template<class IndexConfig> class IndexType>
|
Chris@16
|
322 class basic_managed_mapped_file;
|
Chris@16
|
323
|
Chris@16
|
324 typedef basic_managed_mapped_file
|
Chris@16
|
325 <char
|
Chris@16
|
326 ,rbtree_best_fit<mutex_family>
|
Chris@16
|
327 ,iset_index>
|
Chris@16
|
328 managed_mapped_file;
|
Chris@16
|
329
|
Chris@16
|
330 typedef basic_managed_mapped_file
|
Chris@16
|
331 <wchar_t
|
Chris@16
|
332 ,rbtree_best_fit<mutex_family>
|
Chris@16
|
333 ,iset_index>
|
Chris@16
|
334 wmanaged_mapped_file;
|
Chris@16
|
335
|
Chris@16
|
336 //////////////////////////////////////////////////////////////////////////////
|
Chris@16
|
337 // Exceptions
|
Chris@16
|
338 //////////////////////////////////////////////////////////////////////////////
|
Chris@16
|
339
|
Chris@16
|
340 class interprocess_exception;
|
Chris@16
|
341 class lock_exception;
|
Chris@16
|
342 class bad_alloc;
|
Chris@16
|
343
|
Chris@16
|
344 //////////////////////////////////////////////////////////////////////////////
|
Chris@16
|
345 // Bufferstream
|
Chris@16
|
346 //////////////////////////////////////////////////////////////////////////////
|
Chris@16
|
347
|
Chris@16
|
348 //bufferstream
|
Chris@16
|
349 template <class CharT
|
Chris@16
|
350 ,class CharTraits = std::char_traits<CharT> >
|
Chris@16
|
351 class basic_bufferbuf;
|
Chris@16
|
352
|
Chris@16
|
353 template <class CharT
|
Chris@16
|
354 ,class CharTraits = std::char_traits<CharT> >
|
Chris@16
|
355 class basic_ibufferstream;
|
Chris@16
|
356
|
Chris@16
|
357 template <class CharT
|
Chris@16
|
358 ,class CharTraits = std::char_traits<CharT> >
|
Chris@16
|
359 class basic_obufferstream;
|
Chris@16
|
360
|
Chris@16
|
361 template <class CharT
|
Chris@16
|
362 ,class CharTraits = std::char_traits<CharT> >
|
Chris@16
|
363 class basic_bufferstream;
|
Chris@16
|
364
|
Chris@16
|
365 //////////////////////////////////////////////////////////////////////////////
|
Chris@16
|
366 // Vectorstream
|
Chris@16
|
367 //////////////////////////////////////////////////////////////////////////////
|
Chris@16
|
368
|
Chris@16
|
369 template <class CharVector
|
Chris@16
|
370 ,class CharTraits = std::char_traits<typename CharVector::value_type> >
|
Chris@16
|
371 class basic_vectorbuf;
|
Chris@16
|
372
|
Chris@16
|
373 template <class CharVector
|
Chris@16
|
374 ,class CharTraits = std::char_traits<typename CharVector::value_type> >
|
Chris@16
|
375 class basic_ivectorstream;
|
Chris@16
|
376
|
Chris@16
|
377 template <class CharVector
|
Chris@16
|
378 ,class CharTraits = std::char_traits<typename CharVector::value_type> >
|
Chris@16
|
379 class basic_ovectorstream;
|
Chris@16
|
380
|
Chris@16
|
381 template <class CharVector
|
Chris@16
|
382 ,class CharTraits = std::char_traits<typename CharVector::value_type> >
|
Chris@16
|
383 class basic_vectorstream;
|
Chris@16
|
384
|
Chris@16
|
385 //////////////////////////////////////////////////////////////////////////////
|
Chris@16
|
386 // Smart pointers
|
Chris@16
|
387 //////////////////////////////////////////////////////////////////////////////
|
Chris@16
|
388
|
Chris@16
|
389 template<class T, class Deleter>
|
Chris@16
|
390 class scoped_ptr;
|
Chris@16
|
391
|
Chris@16
|
392 template<class T, class VoidPointer>
|
Chris@16
|
393 class intrusive_ptr;
|
Chris@16
|
394
|
Chris@16
|
395 template<class T, class VoidAllocator, class Deleter>
|
Chris@16
|
396 class shared_ptr;
|
Chris@16
|
397
|
Chris@16
|
398 template<class T, class VoidAllocator, class Deleter>
|
Chris@16
|
399 class weak_ptr;
|
Chris@16
|
400
|
Chris@16
|
401 //////////////////////////////////////////////////////////////////////////////
|
Chris@16
|
402 // IPC
|
Chris@16
|
403 //////////////////////////////////////////////////////////////////////////////
|
Chris@16
|
404
|
Chris@16
|
405 template<class VoidPointer>
|
Chris@16
|
406 class message_queue_t;
|
Chris@16
|
407
|
Chris@16
|
408 typedef message_queue_t<offset_ptr<void> > message_queue;
|
Chris@16
|
409
|
Chris@16
|
410 }} //namespace boost { namespace interprocess {
|
Chris@16
|
411
|
Chris@16
|
412 //////////////////////////////////////////////////////////////////////////////
|
Chris@16
|
413 // CONTAINERS
|
Chris@16
|
414 //////////////////////////////////////////////////////////////////////////////
|
Chris@16
|
415
|
Chris@16
|
416 #include <boost/interprocess/detail/config_end.hpp>
|
Chris@16
|
417
|
Chris@16
|
418 #endif //#ifndef BOOST_INTERPROCESS_FWD_HPP
|