1 //////////////////////////////////////////////////////////////////////////////
3 // (C) Copyright Ion Gaztanaga 2005-2008. Distributed under the Boost
4 // Software License, Version 1.0. (See accompanying file
5 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
7 // See http://www.boost.org/libs/interprocess for documentation.
9 //////////////////////////////////////////////////////////////////////////////
11 #ifndef BOOST_INTERPROCESS_FWD_HPP
12 #define BOOST_INTERPROCESS_FWD_HPP
14 #if defined (_MSC_VER) && (_MSC_VER >= 1200)
18 #include <boost/interprocess/detail/config_begin.hpp>
19 #include <boost/interprocess/detail/workaround.hpp>
23 //////////////////////////////////////////////////////////////////////////////
24 // Standard predeclarations
25 //////////////////////////////////////////////////////////////////////////////
34 namespace interprocess
{
35 namespace bi
= boost::intrusive
;
46 template <class T1
, class T2
>
49 template <class CharType
>
56 namespace boost
{ namespace interprocess
{
58 //////////////////////////////////////////////////////////////////////////////
60 //////////////////////////////////////////////////////////////////////////////
62 class shared_memory_object
;
64 #if defined (BOOST_INTERPROCESS_WINDOWS)
65 class windows_shared_memory
;
66 #endif //#if defined (BOOST_INTERPROCESS_WINDOWS)
68 //////////////////////////////////////////////////////////////////////////////
69 // mapped file/mapped region/mapped_file
70 //////////////////////////////////////////////////////////////////////////////
76 //////////////////////////////////////////////////////////////////////////////
78 //////////////////////////////////////////////////////////////////////////////
82 class interprocess_mutex
;
83 class interprocess_recursive_mutex
;
86 class named_recursive_mutex
;
88 class interprocess_semaphore
;
89 class named_semaphore
;
91 //////////////////////////////////////////////////////////////////////////////
93 //////////////////////////////////////////////////////////////////////////////
96 struct null_mutex_family
;
98 //////////////////////////////////////////////////////////////////////////////
99 // Other synchronization classes
100 //////////////////////////////////////////////////////////////////////////////
103 class interprocess_sharable_mutex
;
104 class interprocess_condition
;
106 //////////////////////////////////////////////////////////////////////////////
108 //////////////////////////////////////////////////////////////////////////////
110 template <class Mutex
>
113 template <class SharableMutex
>
116 template <class UpgradableMutex
>
117 class upgradable_lock
;
119 //////////////////////////////////////////////////////////////////////////////
120 // STL compatible allocators
121 //////////////////////////////////////////////////////////////////////////////
123 template<class T
, class SegmentManager
>
126 template<class T
, class SegmentManager
, std::size_t NodesPerBlock
= 64>
127 class node_allocator
;
129 template<class T
, class SegmentManager
, std::size_t NodesPerBlock
= 64>
130 class private_node_allocator
;
132 template<class T
, class SegmentManager
, std::size_t NodesPerBlock
= 64>
133 class cached_node_allocator
;
135 template<class T
, class SegmentManager
, std::size_t NodesPerBlock
= 64, std::size_t MaxFreeBlocks
= 2
136 , unsigned char OverheadPercent
= 5
140 template<class T
, class SegmentManager
, std::size_t NodesPerBlock
= 64, std::size_t MaxFreeBlocks
= 2
141 , unsigned char OverheadPercent
= 5
143 class private_adaptive_pool
;
145 template<class T
, class SegmentManager
, std::size_t NodesPerBlock
= 64, std::size_t MaxFreeBlocks
= 2
146 , unsigned char OverheadPercent
= 5
148 class cached_adaptive_pool
;
151 //////////////////////////////////////////////////////////////////////////////
153 //////////////////////////////////////////////////////////////////////////////
158 //////////////////////////////////////////////////////////////////////////////
159 // Memory allocation algorithms
160 //////////////////////////////////////////////////////////////////////////////
162 //Single segment memory allocation algorithms
163 template<class MutexFamily
, class VoidMutex
= offset_ptr
<void> >
164 class simple_seq_fit
;
166 template<class MutexFamily
, class VoidMutex
= offset_ptr
<void>, std::size_t MemAlignment
= 0>
167 class rbtree_best_fit
;
169 //////////////////////////////////////////////////////////////////////////////
171 //////////////////////////////////////////////////////////////////////////////
173 template<class IndexConfig
> class flat_map_index
;
174 template<class IndexConfig
> class iset_index
;
175 template<class IndexConfig
> class iunordered_set_index
;
176 template<class IndexConfig
> class map_index
;
177 template<class IndexConfig
> class null_index
;
178 template<class IndexConfig
> class unordered_map_index
;
180 //////////////////////////////////////////////////////////////////////////////
182 //////////////////////////////////////////////////////////////////////////////
184 template <class CharType
185 ,class MemoryAlgorithm
186 ,template<class IndexConfig
> class IndexType
>
187 class segment_manager
;
189 //////////////////////////////////////////////////////////////////////////////
190 // External buffer managed memory classes
191 //////////////////////////////////////////////////////////////////////////////
193 template <class CharType
194 ,class MemoryAlgorithm
195 ,template<class IndexConfig
> class IndexType
>
196 class basic_managed_external_buffer
;
198 typedef basic_managed_external_buffer
200 ,rbtree_best_fit
<null_mutex_family
>
202 managed_external_buffer
;
204 typedef basic_managed_external_buffer
206 ,rbtree_best_fit
<null_mutex_family
>
208 wmanaged_external_buffer
;
210 //////////////////////////////////////////////////////////////////////////////
211 // managed memory classes
212 //////////////////////////////////////////////////////////////////////////////
214 template <class CharType
215 ,class MemoryAlgorithm
216 ,template<class IndexConfig
> class IndexType
>
217 class basic_managed_shared_memory
;
219 typedef basic_managed_shared_memory
221 ,rbtree_best_fit
<mutex_family
>
223 managed_shared_memory
;
225 typedef basic_managed_shared_memory
227 ,rbtree_best_fit
<mutex_family
>
229 wmanaged_shared_memory
;
232 //////////////////////////////////////////////////////////////////////////////
233 // Windows shared memory managed memory classes
234 //////////////////////////////////////////////////////////////////////////////
236 #if defined (BOOST_INTERPROCESS_WINDOWS)
238 template <class CharType
239 ,class MemoryAlgorithm
240 ,template<class IndexConfig
> class IndexType
>
241 class basic_managed_windows_shared_memory
;
243 typedef basic_managed_windows_shared_memory
245 ,rbtree_best_fit
<mutex_family
>
247 managed_windows_shared_memory
;
249 typedef basic_managed_windows_shared_memory
251 ,rbtree_best_fit
<mutex_family
>
253 wmanaged_windows_shared_memory
;
257 template <class CharType
258 ,class MemoryAlgorithm
259 ,template<class IndexConfig
> class IndexType
>
260 class basic_managed_xsi_shared_memory
;
262 typedef basic_managed_xsi_shared_memory
264 ,rbtree_best_fit
<mutex_family
>
266 managed_xsi_shared_memory
;
268 typedef basic_managed_xsi_shared_memory
270 ,rbtree_best_fit
<mutex_family
>
272 wmanaged_xsi_shared_memory
;
274 #endif //#if defined (BOOST_INTERPROCESS_WINDOWS)
276 //////////////////////////////////////////////////////////////////////////////
277 // Fixed address shared memory
278 //////////////////////////////////////////////////////////////////////////////
280 typedef basic_managed_shared_memory
282 ,rbtree_best_fit
<mutex_family
, void*>
284 fixed_managed_shared_memory
;
286 typedef basic_managed_shared_memory
288 ,rbtree_best_fit
<mutex_family
, void*>
290 wfixed_managed_shared_memory
;
292 //////////////////////////////////////////////////////////////////////////////
293 // Heap memory managed memory classes
294 //////////////////////////////////////////////////////////////////////////////
298 ,class MemoryAlgorithm
299 ,template<class IndexConfig
> class IndexType
>
300 class basic_managed_heap_memory
;
302 typedef basic_managed_heap_memory
304 ,rbtree_best_fit
<null_mutex_family
>
308 typedef basic_managed_heap_memory
310 ,rbtree_best_fit
<null_mutex_family
>
312 wmanaged_heap_memory
;
314 //////////////////////////////////////////////////////////////////////////////
315 // Mapped file managed memory classes
316 //////////////////////////////////////////////////////////////////////////////
320 ,class MemoryAlgorithm
321 ,template<class IndexConfig
> class IndexType
>
322 class basic_managed_mapped_file
;
324 typedef basic_managed_mapped_file
326 ,rbtree_best_fit
<mutex_family
>
330 typedef basic_managed_mapped_file
332 ,rbtree_best_fit
<mutex_family
>
334 wmanaged_mapped_file
;
336 //////////////////////////////////////////////////////////////////////////////
338 //////////////////////////////////////////////////////////////////////////////
340 class interprocess_exception
;
341 class lock_exception
;
344 //////////////////////////////////////////////////////////////////////////////
346 //////////////////////////////////////////////////////////////////////////////
349 template <class CharT
350 ,class CharTraits
= std::char_traits
<CharT
> >
351 class basic_bufferbuf
;
353 template <class CharT
354 ,class CharTraits
= std::char_traits
<CharT
> >
355 class basic_ibufferstream
;
357 template <class CharT
358 ,class CharTraits
= std::char_traits
<CharT
> >
359 class basic_obufferstream
;
361 template <class CharT
362 ,class CharTraits
= std::char_traits
<CharT
> >
363 class basic_bufferstream
;
365 //////////////////////////////////////////////////////////////////////////////
367 //////////////////////////////////////////////////////////////////////////////
369 template <class CharVector
370 ,class CharTraits
= std::char_traits
<typename
CharVector::value_type
> >
371 class basic_vectorbuf
;
373 template <class CharVector
374 ,class CharTraits
= std::char_traits
<typename
CharVector::value_type
> >
375 class basic_ivectorstream
;
377 template <class CharVector
378 ,class CharTraits
= std::char_traits
<typename
CharVector::value_type
> >
379 class basic_ovectorstream
;
381 template <class CharVector
382 ,class CharTraits
= std::char_traits
<typename
CharVector::value_type
> >
383 class basic_vectorstream
;
385 //////////////////////////////////////////////////////////////////////////////
387 //////////////////////////////////////////////////////////////////////////////
389 template<class T
, class Deleter
>
392 template<class T
, class VoidPointer
>
395 template<class T
, class VoidAllocator
, class Deleter
>
398 template<class T
, class VoidAllocator
, class Deleter
>
401 //////////////////////////////////////////////////////////////////////////////
403 //////////////////////////////////////////////////////////////////////////////
407 }} //namespace boost { namespace interprocess {
409 //////////////////////////////////////////////////////////////////////////////
411 //////////////////////////////////////////////////////////////////////////////
413 #include <boost/interprocess/detail/config_end.hpp>
415 #endif //#ifndef BOOST_INTERPROCESS_FWD_HPP