////////////////////////////////////////////////////////////////////////////// // // (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 #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; }} #include <utility> #include <memory> #include <functional> #include <iosfwd> #include <string> /// @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