You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and dots ('.'), can be up to 35 characters long. Letters must be lowercase.
439 lines
13 KiB
439 lines
13 KiB
////////////////////////////////////////////////////////////////////////////// |
|
// |
|
// (C) Copyright Ion Gaztanaga 2005-2009. 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 |
|
|
|
#if defined (_MSC_VER) && (_MSC_VER >= 1200) |
|
# pragma once |
|
#endif |
|
|
|
#include <boost/interprocess/detail/config_begin.hpp> |
|
#include <boost/interprocess/detail/workaround.hpp> |
|
|
|
#include <cstddef> |
|
|
|
////////////////////////////////////////////////////////////////////////////// |
|
// Standard predeclarations |
|
////////////////////////////////////////////////////////////////////////////// |
|
|
|
/// @cond |
|
|
|
namespace boost{ |
|
namespace intrusive{ |
|
}} |
|
|
|
namespace boost{ |
|
namespace interprocess{ |
|
namespace bi = boost::intrusive; |
|
}} |
|
|
|
#ifndef _LIBCPP_VERSION |
|
|
|
namespace std { |
|
|
|
template <class T> |
|
class allocator; |
|
|
|
template <class T> |
|
struct less; |
|
|
|
template <class T1, class T2> |
|
struct pair; |
|
|
|
template <class CharType> |
|
struct char_traits; |
|
|
|
} //namespace std { |
|
|
|
#else |
|
|
|
#include <utility> |
|
#include <memory> |
|
#include <functional> |
|
#include <iosfwd> |
|
|
|
#endif |
|
|
|
/// @endcond |
|
|
|
namespace boost { namespace interprocess { |
|
|
|
////////////////////////////////////////////////////////////////////////////// |
|
// permissions |
|
////////////////////////////////////////////////////////////////////////////// |
|
|
|
class permissions; |
|
|
|
////////////////////////////////////////////////////////////////////////////// |
|
// shared_memory |
|
////////////////////////////////////////////////////////////////////////////// |
|
|
|
class shared_memory_object; |
|
|
|
#if defined (BOOST_INTERPROCESS_WINDOWS) || defined(BOOST_INTERPROCESS_DOXYGEN_INVOKED) |
|
class windows_shared_memory; |
|
#endif //#if defined (BOOST_INTERPROCESS_WINDOWS) |
|
|
|
////////////////////////////////////////////////////////////////////////////// |
|
// mapped file/mapped region/mapped_file |
|
////////////////////////////////////////////////////////////////////////////// |
|
|
|
class file_mapping; |
|
class mapped_region; |
|
class mapped_file; |
|
|
|
////////////////////////////////////////////////////////////////////////////// |
|
// 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 barrier; |
|
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; |
|
|
|
template <class T, class DifferenceType = std::ptrdiff_t, class OffsetType = std::size_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) || defined(BOOST_INTERPROCESS_DOXYGEN_INVOKED) |
|
|
|
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) || defined(BOOST_INTERPROCESS_DOXYGEN_INVOKED) |
|
|
|
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 { |
|
|
|
////////////////////////////////////////////////////////////////////////////// |
|
// CONTAINERS |
|
////////////////////////////////////////////////////////////////////////////// |
|
|
|
#include <boost/interprocess/detail/config_end.hpp> |
|
|
|
#endif //#ifndef BOOST_INTERPROCESS_FWD_HPP
|
|
|