517 lines
		
	
	
		
			18 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			517 lines
		
	
	
		
			18 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| //////////////////////////////////////////////////////////////////////////////
 | |
| //
 | |
| // (C) Copyright Ion Gaztanaga 2005-2012. Distributed under the Boost
 | |
| // Software License, Version 1.0. (See accompanying file
 | |
| // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 | |
| //
 | |
| // See http://www.boost.org/libs/interprocess for documentation.
 | |
| //
 | |
| //////////////////////////////////////////////////////////////////////////////
 | |
| 
 | |
| #ifndef BOOST_INTERPROCESS_FWD_HPP
 | |
| #define BOOST_INTERPROCESS_FWD_HPP
 | |
| 
 | |
| #ifndef BOOST_CONFIG_HPP
 | |
| #  include <boost/config.hpp>
 | |
| #endif
 | |
| #ifndef BOOST_CSTDINT_HPP
 | |
| #  include <boost/cstdint.hpp>
 | |
| #endif
 | |
| #
 | |
| #if defined(BOOST_HAS_PRAGMA_ONCE)
 | |
| #  pragma once
 | |
| #endif
 | |
| 
 | |
| #include <boost/interprocess/detail/std_fwd.hpp>
 | |
| 
 | |
| //! \file
 | |
| //! This header file forward declares the basic interprocess types:
 | |
| //!   - boost::interprocess::offset_ptr;
 | |
| //!   - boost::interprocess::permissions;
 | |
| //!   - boost::interprocess::mapped_region;
 | |
| //!   - boost::interprocess::file_mapping;
 | |
| //!   - boost::interprocess::shared_memory_object;
 | |
| //!   - boost::interprocess::windows_shared_memory;
 | |
| //!   - boost::interprocess::xsi_shared_memory;
 | |
| //!
 | |
| //! The following synchronization mechanisms and locks:
 | |
| //!   - boost::interprocess::null_mutex;
 | |
| //!   - boost::interprocess::interprocess_mutex;
 | |
| //!   - boost::interprocess::interprocess_recursive_mutex;
 | |
| //!   - boost::interprocess::interprocess_semaphore;
 | |
| //!   - boost::interprocess::named_mutex;
 | |
| //!   - boost::interprocess::named_recursive_mutex;
 | |
| //!   - boost::interprocess::named_semaphore;
 | |
| //!   - boost::interprocess::interprocess_sharable_mutex;
 | |
| //!   - boost::interprocess::interprocess_condition;
 | |
| //!   - boost::interprocess::scoped_lock;
 | |
| //!   - boost::interprocess::sharable_lock;
 | |
| //!   - boost::interprocess::upgradable_lock;
 | |
| //!
 | |
| //! The following mutex families:
 | |
| //!   - boost::interprocess::mutex_family;
 | |
| //!   - boost::interprocess::null_mutex_family;
 | |
| //!
 | |
| //! The following allocators:
 | |
| //!   - boost::interprocess::allocator;
 | |
| //!   - boost::interprocess::node_allocator;
 | |
| //!   - boost::interprocess::private_node_allocator;
 | |
| //!   - boost::interprocess::cached_node_allocator;
 | |
| //!   - boost::interprocess::adaptive_pool;
 | |
| //!   - boost::interprocess::private_adaptive_pool;
 | |
| //!   - boost::interprocess::cached_adaptive_pool;
 | |
| //!
 | |
| //! The following allocation algorithms:
 | |
| //!   - boost::interprocess::simple_seq_fit;
 | |
| //!   - boost::interprocess::rbtree_best_fit;
 | |
| //!
 | |
| //! The following index types:
 | |
| //!   - boost::interprocess::flat_map_index;
 | |
| //!   - boost::interprocess::iset_index;
 | |
| //!   - boost::interprocess::iunordered_set_index;
 | |
| //!   - boost::interprocess::map_index;
 | |
| //!   - boost::interprocess::null_index;
 | |
| //!   - boost::interprocess::unordered_map_index;
 | |
| //!
 | |
| //! The following managed memory types:
 | |
| //!   - boost::interprocess::segment_manager;
 | |
| //!   - boost::interprocess::basic_managed_external_buffer
 | |
| //!   - boost::interprocess::managed_external_buffer
 | |
| //!   - boost::interprocess::wmanaged_external_buffer
 | |
| //!   - boost::interprocess::basic_managed_shared_memory
 | |
| //!   - boost::interprocess::managed_shared_memory
 | |
| //!   - boost::interprocess::wmanaged_shared_memory
 | |
| //!   - boost::interprocess::basic_managed_windows_shared_memory
 | |
| //!   - boost::interprocess::managed_windows_shared_memory
 | |
| //!   - boost::interprocess::wmanaged_windows_shared_memory
 | |
| //!   - boost::interprocess::basic_managed_xsi_shared_memory
 | |
| //!   - boost::interprocess::managed_xsi_shared_memory
 | |
| //!   - boost::interprocess::wmanaged_xsi_shared_memory
 | |
| //!   - boost::interprocess::fixed_managed_shared_memory
 | |
| //!   - boost::interprocess::wfixed_managed_shared_memory
 | |
| //!   - boost::interprocess::basic_managed_heap_memory
 | |
| //!   - boost::interprocess::managed_heap_memory
 | |
| //!   - boost::interprocess::wmanaged_heap_memory
 | |
| //!   - boost::interprocess::basic_managed_mapped_file
 | |
| //!   - boost::interprocess::managed_mapped_file
 | |
| //!   - boost::interprocess::wmanaged_mapped_file
 | |
| //!
 | |
| //! The following exception types:
 | |
| //!   - boost::interprocess::interprocess_exception
 | |
| //!   - boost::interprocess::lock_exception
 | |
| //!   - boost::interprocess::bad_alloc
 | |
| //!
 | |
| //! The following stream types:
 | |
| //!   - boost::interprocess::basic_bufferbuf
 | |
| //!   - boost::interprocess::basic_ibufferstream
 | |
| //!   - boost::interprocess::basic_obufferstream
 | |
| //!   - boost::interprocess::basic_bufferstream
 | |
| //!   - boost::interprocess::basic_vectorbuf
 | |
| //!   - boost::interprocess::basic_ivectorstream
 | |
| //!   - boost::interprocess::basic_ovectorstream
 | |
| //!   - boost::interprocess::basic_vectorstream
 | |
| //!
 | |
| //! The following smart pointer types:
 | |
| //!   - boost::interprocess::scoped_ptr
 | |
| //!   - boost::interprocess::intrusive_ptr
 | |
| //!   - boost::interprocess::shared_ptr
 | |
| //!   - boost::interprocess::weak_ptr
 | |
| //!
 | |
| //! The following interprocess communication types:
 | |
| //!   - boost::interprocess::message_queue_t;
 | |
| //!   - boost::interprocess::message_queue;
 | |
| 
 | |
| #include <boost/interprocess/detail/config_begin.hpp>
 | |
| #include <boost/interprocess/detail/workaround.hpp>
 | |
| 
 | |
| #if !defined(BOOST_INTERPROCESS_DOXYGEN_INVOKED)
 | |
| 
 | |
| #include <cstddef>
 | |
| 
 | |
| //////////////////////////////////////////////////////////////////////////////
 | |
| //                        Standard predeclarations
 | |
| //////////////////////////////////////////////////////////////////////////////
 | |
| 
 | |
| namespace boost{  namespace intrusive{ }  }
 | |
| namespace boost{  namespace interprocess{ namespace bi = boost::intrusive; }  }
 | |
| 
 | |
| namespace boost { namespace interprocess {
 | |
| 
 | |
| //////////////////////////////////////////////////////////////////////////////
 | |
| //                            permissions
 | |
| //////////////////////////////////////////////////////////////////////////////
 | |
| 
 | |
| class permissions;
 | |
| 
 | |
| //////////////////////////////////////////////////////////////////////////////
 | |
| //                            shared_memory
 | |
| //////////////////////////////////////////////////////////////////////////////
 | |
| 
 | |
| class shared_memory_object;
 | |
| 
 | |
| #if defined (BOOST_INTERPROCESS_WINDOWS)
 | |
| class windows_shared_memory;
 | |
| #endif   //#if defined (BOOST_INTERPROCESS_WINDOWS)
 | |
| 
 | |
| #if defined(BOOST_INTERPROCESS_XSI_SHARED_MEMORY_OBJECTS)
 | |
| class xsi_shared_memory;
 | |
| #endif   //#if defined (BOOST_INTERPROCESS_WINDOWS)
 | |
| 
 | |
| //////////////////////////////////////////////////////////////////////////////
 | |
| //              file mapping / mapped region
 | |
| //////////////////////////////////////////////////////////////////////////////
 | |
| 
 | |
| class file_mapping;
 | |
| class mapped_region;
 | |
| 
 | |
| //////////////////////////////////////////////////////////////////////////////
 | |
| //                               Mutexes
 | |
| //////////////////////////////////////////////////////////////////////////////
 | |
| 
 | |
| class null_mutex;
 | |
| 
 | |
| class interprocess_mutex;
 | |
| class interprocess_recursive_mutex;
 | |
| 
 | |
| class named_mutex;
 | |
| class named_recursive_mutex;
 | |
| 
 | |
| class interprocess_semaphore;
 | |
| class named_semaphore;
 | |
| 
 | |
| //////////////////////////////////////////////////////////////////////////////
 | |
| //                         Mutex families
 | |
| //////////////////////////////////////////////////////////////////////////////
 | |
| 
 | |
| struct mutex_family;
 | |
| struct null_mutex_family;
 | |
| 
 | |
| //////////////////////////////////////////////////////////////////////////////
 | |
| //                   Other synchronization classes
 | |
| //////////////////////////////////////////////////////////////////////////////
 | |
| 
 | |
| class interprocess_sharable_mutex;
 | |
| class interprocess_condition;
 | |
| 
 | |
| //////////////////////////////////////////////////////////////////////////////
 | |
| //                              Locks
 | |
| //////////////////////////////////////////////////////////////////////////////
 | |
| 
 | |
| template <class Mutex>
 | |
| class scoped_lock;
 | |
| 
 | |
| template <class SharableMutex>
 | |
| class sharable_lock;
 | |
| 
 | |
| template <class UpgradableMutex>
 | |
| class upgradable_lock;
 | |
| 
 | |
| //////////////////////////////////////////////////////////////////////////////
 | |
| //                      STL compatible allocators
 | |
| //////////////////////////////////////////////////////////////////////////////
 | |
| 
 | |
| template<class T, class SegmentManager>
 | |
| class allocator;
 | |
| 
 | |
| template<class T, class SegmentManager, std::size_t NodesPerBlock = 64>
 | |
| class node_allocator;
 | |
| 
 | |
| template<class T, class SegmentManager, std::size_t NodesPerBlock = 64>
 | |
| class private_node_allocator;
 | |
| 
 | |
| template<class T, class SegmentManager, std::size_t NodesPerBlock = 64>
 | |
| class cached_node_allocator;
 | |
| 
 | |
| template< class T, class SegmentManager, std::size_t NodesPerBlock = 64
 | |
|         , std::size_t MaxFreeBlocks = 2, unsigned char OverheadPercent = 5 >
 | |
| class adaptive_pool;
 | |
| 
 | |
| template< class T, class SegmentManager, std::size_t NodesPerBlock = 64
 | |
|         , std::size_t MaxFreeBlocks = 2, unsigned char OverheadPercent = 5 >
 | |
| class private_adaptive_pool;
 | |
| 
 | |
| template< class T, class SegmentManager, std::size_t NodesPerBlock = 64
 | |
|         , std::size_t MaxFreeBlocks = 2, unsigned char OverheadPercent = 5 >
 | |
| class cached_adaptive_pool;
 | |
| 
 | |
| 
 | |
| //////////////////////////////////////////////////////////////////////////////
 | |
| //                            offset_ptr
 | |
| //////////////////////////////////////////////////////////////////////////////
 | |
| 
 | |
| static const std::size_t offset_type_alignment = 0;
 | |
| 
 | |
| #if !defined(BOOST_INTERPROCESS_DOXYGEN_INVOKED)
 | |
| #  ifdef BOOST_HAS_INTPTR_T
 | |
|       using ::boost::uintptr_t;
 | |
| #  else
 | |
|       typedef std::size_t uintptr_t;
 | |
| #  endif
 | |
| #endif
 | |
| 
 | |
| template < class T, class DifferenceType = std::ptrdiff_t
 | |
|          , class OffsetType = uintptr_t, std::size_t Alignment = offset_type_alignment>
 | |
| class offset_ptr;
 | |
| 
 | |
| //////////////////////////////////////////////////////////////////////////////
 | |
| //                    Memory allocation algorithms
 | |
| //////////////////////////////////////////////////////////////////////////////
 | |
| 
 | |
| //Single segment memory allocation algorithms
 | |
| template<class MutexFamily, class VoidMutex = offset_ptr<void> >
 | |
| class simple_seq_fit;
 | |
| 
 | |
| template<class MutexFamily, class VoidMutex = offset_ptr<void>, std::size_t MemAlignment = 0>
 | |
| class rbtree_best_fit;
 | |
| 
 | |
| //////////////////////////////////////////////////////////////////////////////
 | |
| //                         Index Types
 | |
| //////////////////////////////////////////////////////////////////////////////
 | |
| 
 | |
| template<class IndexConfig> class flat_map_index;
 | |
| template<class IndexConfig> class iset_index;
 | |
| template<class IndexConfig> class iunordered_set_index;
 | |
| template<class IndexConfig> class map_index;
 | |
| template<class IndexConfig> class null_index;
 | |
| template<class IndexConfig> class unordered_map_index;
 | |
| 
 | |
| //////////////////////////////////////////////////////////////////////////////
 | |
| //                         Segment manager
 | |
| //////////////////////////////////////////////////////////////////////////////
 | |
| 
 | |
| template <class CharType
 | |
|          ,class MemoryAlgorithm
 | |
|          ,template<class IndexConfig> class IndexType>
 | |
| class segment_manager;
 | |
| 
 | |
| //////////////////////////////////////////////////////////////////////////////
 | |
| //                  External buffer managed memory classes
 | |
| //////////////////////////////////////////////////////////////////////////////
 | |
| 
 | |
| template <class CharType
 | |
|          ,class MemoryAlgorithm
 | |
|          ,template<class IndexConfig> class IndexType>
 | |
| class basic_managed_external_buffer;
 | |
| 
 | |
| typedef basic_managed_external_buffer
 | |
|    <char
 | |
|    ,rbtree_best_fit<null_mutex_family>
 | |
|    ,iset_index>
 | |
| managed_external_buffer;
 | |
| 
 | |
| typedef basic_managed_external_buffer
 | |
|    <wchar_t
 | |
|    ,rbtree_best_fit<null_mutex_family>
 | |
|    ,iset_index>
 | |
| wmanaged_external_buffer;
 | |
| 
 | |
| //////////////////////////////////////////////////////////////////////////////
 | |
| //                      managed memory classes
 | |
| //////////////////////////////////////////////////////////////////////////////
 | |
| 
 | |
| template <class CharType
 | |
|          ,class MemoryAlgorithm
 | |
|          ,template<class IndexConfig> class IndexType>
 | |
| class basic_managed_shared_memory;
 | |
| 
 | |
| typedef basic_managed_shared_memory
 | |
|    <char
 | |
|    ,rbtree_best_fit<mutex_family>
 | |
|    ,iset_index>
 | |
| managed_shared_memory;
 | |
| 
 | |
| typedef basic_managed_shared_memory
 | |
|    <wchar_t
 | |
|    ,rbtree_best_fit<mutex_family>
 | |
|    ,iset_index>
 | |
| wmanaged_shared_memory;
 | |
| 
 | |
| 
 | |
| //////////////////////////////////////////////////////////////////////////////
 | |
| //                      Windows shared memory managed memory classes
 | |
| //////////////////////////////////////////////////////////////////////////////
 | |
| 
 | |
| #if defined (BOOST_INTERPROCESS_WINDOWS)
 | |
| 
 | |
| template <class CharType
 | |
|          ,class MemoryAlgorithm
 | |
|          ,template<class IndexConfig> class IndexType>
 | |
| class basic_managed_windows_shared_memory;
 | |
| 
 | |
| typedef basic_managed_windows_shared_memory
 | |
|    <char
 | |
|    ,rbtree_best_fit<mutex_family>
 | |
|    ,iset_index>
 | |
| managed_windows_shared_memory;
 | |
| 
 | |
| typedef basic_managed_windows_shared_memory
 | |
|    <wchar_t
 | |
|    ,rbtree_best_fit<mutex_family>
 | |
|    ,iset_index>
 | |
| wmanaged_windows_shared_memory;
 | |
| 
 | |
| #endif   //#if defined (BOOST_INTERPROCESS_WINDOWS)
 | |
| 
 | |
| #if defined(BOOST_INTERPROCESS_XSI_SHARED_MEMORY_OBJECTS)
 | |
| 
 | |
| template <class CharType
 | |
|          ,class MemoryAlgorithm
 | |
|          ,template<class IndexConfig> class IndexType>
 | |
| class basic_managed_xsi_shared_memory;
 | |
| 
 | |
| typedef basic_managed_xsi_shared_memory
 | |
|    <char
 | |
|    ,rbtree_best_fit<mutex_family>
 | |
|    ,iset_index>
 | |
| managed_xsi_shared_memory;
 | |
| 
 | |
| typedef basic_managed_xsi_shared_memory
 | |
|    <wchar_t
 | |
|    ,rbtree_best_fit<mutex_family>
 | |
|    ,iset_index>
 | |
| wmanaged_xsi_shared_memory;
 | |
| 
 | |
| #endif //#if defined(BOOST_INTERPROCESS_XSI_SHARED_MEMORY_OBJECTS)
 | |
| 
 | |
| //////////////////////////////////////////////////////////////////////////////
 | |
| //                      Fixed address shared memory
 | |
| //////////////////////////////////////////////////////////////////////////////
 | |
| 
 | |
| typedef basic_managed_shared_memory
 | |
|    <char
 | |
|    ,rbtree_best_fit<mutex_family, void*>
 | |
|    ,iset_index>
 | |
| fixed_managed_shared_memory;
 | |
| 
 | |
| typedef basic_managed_shared_memory
 | |
|    <wchar_t
 | |
|    ,rbtree_best_fit<mutex_family, void*>
 | |
|    ,iset_index>
 | |
| wfixed_managed_shared_memory;
 | |
| 
 | |
| //////////////////////////////////////////////////////////////////////////////
 | |
| //                      Heap memory managed memory classes
 | |
| //////////////////////////////////////////////////////////////////////////////
 | |
| 
 | |
| template
 | |
|    <class CharType
 | |
|    ,class MemoryAlgorithm
 | |
|    ,template<class IndexConfig> class IndexType>
 | |
| class basic_managed_heap_memory;
 | |
| 
 | |
| typedef basic_managed_heap_memory
 | |
|    <char
 | |
|    ,rbtree_best_fit<null_mutex_family>
 | |
|    ,iset_index>
 | |
| managed_heap_memory;
 | |
| 
 | |
| typedef basic_managed_heap_memory
 | |
|    <wchar_t
 | |
|    ,rbtree_best_fit<null_mutex_family>
 | |
|    ,iset_index>
 | |
| wmanaged_heap_memory;
 | |
| 
 | |
| //////////////////////////////////////////////////////////////////////////////
 | |
| //                         Mapped file managed memory classes
 | |
| //////////////////////////////////////////////////////////////////////////////
 | |
| 
 | |
| template
 | |
|    <class CharType
 | |
|    ,class MemoryAlgorithm
 | |
|    ,template<class IndexConfig> class IndexType>
 | |
| class basic_managed_mapped_file;
 | |
| 
 | |
| typedef basic_managed_mapped_file
 | |
|    <char
 | |
|    ,rbtree_best_fit<mutex_family>
 | |
|    ,iset_index>
 | |
| managed_mapped_file;
 | |
| 
 | |
| typedef basic_managed_mapped_file
 | |
|    <wchar_t
 | |
|    ,rbtree_best_fit<mutex_family>
 | |
|    ,iset_index>
 | |
| wmanaged_mapped_file;
 | |
| 
 | |
| //////////////////////////////////////////////////////////////////////////////
 | |
| //                            Exceptions
 | |
| //////////////////////////////////////////////////////////////////////////////
 | |
| 
 | |
| class interprocess_exception;
 | |
| class lock_exception;
 | |
| class bad_alloc;
 | |
| 
 | |
| //////////////////////////////////////////////////////////////////////////////
 | |
| //                            Bufferstream
 | |
| //////////////////////////////////////////////////////////////////////////////
 | |
| 
 | |
| //bufferstream
 | |
| template <class CharT
 | |
|          ,class CharTraits = std::char_traits<CharT> >
 | |
| class basic_bufferbuf;
 | |
| 
 | |
| template <class CharT
 | |
|          ,class CharTraits = std::char_traits<CharT> >
 | |
| class basic_ibufferstream;
 | |
| 
 | |
| template <class CharT
 | |
|          ,class CharTraits = std::char_traits<CharT> >
 | |
| class basic_obufferstream;
 | |
| 
 | |
| template <class CharT
 | |
|          ,class CharTraits = std::char_traits<CharT> >
 | |
| class basic_bufferstream;
 | |
| 
 | |
| //////////////////////////////////////////////////////////////////////////////
 | |
| //                            Vectorstream
 | |
| //////////////////////////////////////////////////////////////////////////////
 | |
| 
 | |
| template <class CharVector
 | |
|          ,class CharTraits = std::char_traits<typename CharVector::value_type> >
 | |
| class basic_vectorbuf;
 | |
| 
 | |
| template <class CharVector
 | |
|          ,class CharTraits = std::char_traits<typename CharVector::value_type> >
 | |
| class basic_ivectorstream;
 | |
| 
 | |
| template <class CharVector
 | |
|          ,class CharTraits = std::char_traits<typename CharVector::value_type> >
 | |
| class basic_ovectorstream;
 | |
| 
 | |
| template <class CharVector
 | |
|          ,class CharTraits = std::char_traits<typename CharVector::value_type> >
 | |
| class basic_vectorstream;
 | |
| 
 | |
| //////////////////////////////////////////////////////////////////////////////
 | |
| //                             Smart pointers
 | |
| //////////////////////////////////////////////////////////////////////////////
 | |
| 
 | |
| template<class T, class Deleter>
 | |
| class scoped_ptr;
 | |
| 
 | |
| template<class T, class VoidPointer>
 | |
| class intrusive_ptr;
 | |
| 
 | |
| template<class T, class VoidAllocator, class Deleter>
 | |
| class shared_ptr;
 | |
| 
 | |
| template<class T, class VoidAllocator, class Deleter>
 | |
| class weak_ptr;
 | |
| 
 | |
| //////////////////////////////////////////////////////////////////////////////
 | |
| //                                  IPC
 | |
| //////////////////////////////////////////////////////////////////////////////
 | |
| 
 | |
| template<class VoidPointer>
 | |
| class message_queue_t;
 | |
| 
 | |
| typedef message_queue_t<offset_ptr<void> > message_queue;
 | |
| 
 | |
| }}  //namespace boost { namespace interprocess {
 | |
| 
 | |
| #endif   //#if !defined(BOOST_INTERPROCESS_DOXYGEN_INVOKED)
 | |
| 
 | |
| #include <boost/interprocess/detail/config_end.hpp>
 | |
| 
 | |
| #endif //#ifndef BOOST_INTERPROCESS_FWD_HPP
 | 
