Chris@16: ////////////////////////////////////////////////////////////////////////////// Chris@16: // Chris@16: // (C) Copyright Ion Gaztanaga 2005-2012. Distributed under the Boost Chris@16: // Software License, Version 1.0. (See accompanying file Chris@16: // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) Chris@16: // Chris@16: // See http://www.boost.org/libs/interprocess for documentation. Chris@16: // Chris@16: ////////////////////////////////////////////////////////////////////////////// Chris@16: Chris@16: #ifndef BOOST_INTERPROCESS_FWD_HPP Chris@16: #define BOOST_INTERPROCESS_FWD_HPP Chris@16: Chris@16: #if defined (_MSC_VER) && (_MSC_VER >= 1200) Chris@16: # pragma once Chris@16: #endif Chris@16: Chris@16: #include Chris@16: #include Chris@16: Chris@16: #include Chris@16: Chris@16: ////////////////////////////////////////////////////////////////////////////// Chris@16: // Standard predeclarations Chris@16: ////////////////////////////////////////////////////////////////////////////// Chris@16: Chris@16: /// @cond Chris@16: Chris@16: namespace boost{ Chris@16: namespace intrusive{ Chris@16: }} Chris@16: Chris@16: namespace boost{ Chris@16: namespace interprocess{ Chris@16: namespace bi = boost::intrusive; Chris@16: }} Chris@16: Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: Chris@16: /// @endcond Chris@16: Chris@16: namespace boost { namespace interprocess { Chris@16: Chris@16: ////////////////////////////////////////////////////////////////////////////// Chris@16: // permissions Chris@16: ////////////////////////////////////////////////////////////////////////////// Chris@16: Chris@16: class permissions; Chris@16: Chris@16: ////////////////////////////////////////////////////////////////////////////// Chris@16: // shared_memory Chris@16: ////////////////////////////////////////////////////////////////////////////// Chris@16: Chris@16: class shared_memory_object; Chris@16: Chris@16: #if defined (BOOST_INTERPROCESS_WINDOWS) || defined(BOOST_INTERPROCESS_DOXYGEN_INVOKED) Chris@16: class windows_shared_memory; Chris@16: #endif //#if defined (BOOST_INTERPROCESS_WINDOWS) Chris@16: Chris@16: ////////////////////////////////////////////////////////////////////////////// Chris@16: // mapped file/mapped region/mapped_file Chris@16: ////////////////////////////////////////////////////////////////////////////// Chris@16: Chris@16: class file_mapping; Chris@16: class mapped_region; Chris@16: class mapped_file; Chris@16: Chris@16: ////////////////////////////////////////////////////////////////////////////// Chris@16: // Mutexes Chris@16: ////////////////////////////////////////////////////////////////////////////// Chris@16: Chris@16: class null_mutex; Chris@16: Chris@16: class interprocess_mutex; Chris@16: class interprocess_recursive_mutex; Chris@16: Chris@16: class named_mutex; Chris@16: class named_recursive_mutex; Chris@16: Chris@16: class interprocess_semaphore; Chris@16: class named_semaphore; Chris@16: Chris@16: ////////////////////////////////////////////////////////////////////////////// Chris@16: // Mutex families Chris@16: ////////////////////////////////////////////////////////////////////////////// Chris@16: Chris@16: struct mutex_family; Chris@16: struct null_mutex_family; Chris@16: Chris@16: ////////////////////////////////////////////////////////////////////////////// Chris@16: // Other synchronization classes Chris@16: ////////////////////////////////////////////////////////////////////////////// Chris@16: Chris@16: class barrier; Chris@16: class interprocess_sharable_mutex; Chris@16: class interprocess_condition; Chris@16: Chris@16: ////////////////////////////////////////////////////////////////////////////// Chris@16: // Locks Chris@16: ////////////////////////////////////////////////////////////////////////////// Chris@16: Chris@16: template Chris@16: class scoped_lock; Chris@16: Chris@16: template Chris@16: class sharable_lock; Chris@16: Chris@16: template Chris@16: class upgradable_lock; Chris@16: Chris@16: ////////////////////////////////////////////////////////////////////////////// Chris@16: // STL compatible allocators Chris@16: ////////////////////////////////////////////////////////////////////////////// Chris@16: Chris@16: template Chris@16: class allocator; Chris@16: Chris@16: template Chris@16: class node_allocator; Chris@16: Chris@16: template Chris@16: class private_node_allocator; Chris@16: Chris@16: template Chris@16: class cached_node_allocator; Chris@16: Chris@16: template Chris@16: class adaptive_pool; Chris@16: Chris@16: template Chris@16: class private_adaptive_pool; Chris@16: Chris@16: template Chris@16: class cached_adaptive_pool; Chris@16: Chris@16: Chris@16: ////////////////////////////////////////////////////////////////////////////// Chris@16: // offset_ptr Chris@16: ////////////////////////////////////////////////////////////////////////////// Chris@16: Chris@16: static const std::size_t offset_type_alignment = 0; Chris@16: Chris@16: template Chris@16: class offset_ptr; Chris@16: Chris@16: ////////////////////////////////////////////////////////////////////////////// Chris@16: // Memory allocation algorithms Chris@16: ////////////////////////////////////////////////////////////////////////////// Chris@16: Chris@16: //Single segment memory allocation algorithms Chris@16: template > Chris@16: class simple_seq_fit; Chris@16: Chris@16: template, std::size_t MemAlignment = 0> Chris@16: class rbtree_best_fit; Chris@16: Chris@16: ////////////////////////////////////////////////////////////////////////////// Chris@16: // Index Types Chris@16: ////////////////////////////////////////////////////////////////////////////// Chris@16: Chris@16: template class flat_map_index; Chris@16: template class iset_index; Chris@16: template class iunordered_set_index; Chris@16: template class map_index; Chris@16: template class null_index; Chris@16: template class unordered_map_index; Chris@16: Chris@16: ////////////////////////////////////////////////////////////////////////////// Chris@16: // Segment manager Chris@16: ////////////////////////////////////////////////////////////////////////////// Chris@16: Chris@16: template class IndexType> Chris@16: class segment_manager; Chris@16: Chris@16: ////////////////////////////////////////////////////////////////////////////// Chris@16: // External buffer managed memory classes Chris@16: ////////////////////////////////////////////////////////////////////////////// Chris@16: Chris@16: template class IndexType> Chris@16: class basic_managed_external_buffer; Chris@16: Chris@16: typedef basic_managed_external_buffer Chris@16: Chris@16: ,iset_index> Chris@16: managed_external_buffer; Chris@16: Chris@16: typedef basic_managed_external_buffer Chris@16: Chris@16: ,iset_index> Chris@16: wmanaged_external_buffer; Chris@16: Chris@16: ////////////////////////////////////////////////////////////////////////////// Chris@16: // managed memory classes Chris@16: ////////////////////////////////////////////////////////////////////////////// Chris@16: Chris@16: template class IndexType> Chris@16: class basic_managed_shared_memory; Chris@16: Chris@16: typedef basic_managed_shared_memory Chris@16: Chris@16: ,iset_index> Chris@16: managed_shared_memory; Chris@16: Chris@16: typedef basic_managed_shared_memory Chris@16: Chris@16: ,iset_index> Chris@16: wmanaged_shared_memory; Chris@16: Chris@16: Chris@16: ////////////////////////////////////////////////////////////////////////////// Chris@16: // Windows shared memory managed memory classes Chris@16: ////////////////////////////////////////////////////////////////////////////// Chris@16: Chris@16: #if defined (BOOST_INTERPROCESS_WINDOWS) || defined(BOOST_INTERPROCESS_DOXYGEN_INVOKED) Chris@16: Chris@16: template class IndexType> Chris@16: class basic_managed_windows_shared_memory; Chris@16: Chris@16: typedef basic_managed_windows_shared_memory Chris@16: Chris@16: ,iset_index> Chris@16: managed_windows_shared_memory; Chris@16: Chris@16: typedef basic_managed_windows_shared_memory Chris@16: Chris@16: ,iset_index> Chris@16: wmanaged_windows_shared_memory; Chris@16: Chris@16: #endif //#if defined (BOOST_INTERPROCESS_WINDOWS) Chris@16: Chris@16: #if defined(BOOST_INTERPROCESS_XSI_SHARED_MEMORY_OBJECTS) || defined(BOOST_INTERPROCESS_DOXYGEN_INVOKED) Chris@16: Chris@16: template class IndexType> Chris@16: class basic_managed_xsi_shared_memory; Chris@16: Chris@16: typedef basic_managed_xsi_shared_memory Chris@16: Chris@16: ,iset_index> Chris@16: managed_xsi_shared_memory; Chris@16: Chris@16: typedef basic_managed_xsi_shared_memory Chris@16: Chris@16: ,iset_index> Chris@16: wmanaged_xsi_shared_memory; Chris@16: Chris@16: #endif //#if defined(BOOST_INTERPROCESS_XSI_SHARED_MEMORY_OBJECTS) Chris@16: Chris@16: ////////////////////////////////////////////////////////////////////////////// Chris@16: // Fixed address shared memory Chris@16: ////////////////////////////////////////////////////////////////////////////// Chris@16: Chris@16: typedef basic_managed_shared_memory Chris@16: Chris@16: ,iset_index> Chris@16: fixed_managed_shared_memory; Chris@16: Chris@16: typedef basic_managed_shared_memory Chris@16: Chris@16: ,iset_index> Chris@16: wfixed_managed_shared_memory; Chris@16: Chris@16: ////////////////////////////////////////////////////////////////////////////// Chris@16: // Heap memory managed memory classes Chris@16: ////////////////////////////////////////////////////////////////////////////// Chris@16: Chris@16: template Chris@16: class IndexType> Chris@16: class basic_managed_heap_memory; Chris@16: Chris@16: typedef basic_managed_heap_memory Chris@16: Chris@16: ,iset_index> Chris@16: managed_heap_memory; Chris@16: Chris@16: typedef basic_managed_heap_memory Chris@16: Chris@16: ,iset_index> Chris@16: wmanaged_heap_memory; Chris@16: Chris@16: ////////////////////////////////////////////////////////////////////////////// Chris@16: // Mapped file managed memory classes Chris@16: ////////////////////////////////////////////////////////////////////////////// Chris@16: Chris@16: template Chris@16: class IndexType> Chris@16: class basic_managed_mapped_file; Chris@16: Chris@16: typedef basic_managed_mapped_file Chris@16: Chris@16: ,iset_index> Chris@16: managed_mapped_file; Chris@16: Chris@16: typedef basic_managed_mapped_file Chris@16: Chris@16: ,iset_index> Chris@16: wmanaged_mapped_file; Chris@16: Chris@16: ////////////////////////////////////////////////////////////////////////////// Chris@16: // Exceptions Chris@16: ////////////////////////////////////////////////////////////////////////////// Chris@16: Chris@16: class interprocess_exception; Chris@16: class lock_exception; Chris@16: class bad_alloc; Chris@16: Chris@16: ////////////////////////////////////////////////////////////////////////////// Chris@16: // Bufferstream Chris@16: ////////////////////////////////////////////////////////////////////////////// Chris@16: Chris@16: //bufferstream Chris@16: template > Chris@16: class basic_bufferbuf; Chris@16: Chris@16: template > Chris@16: class basic_ibufferstream; Chris@16: Chris@16: template > Chris@16: class basic_obufferstream; Chris@16: Chris@16: template > Chris@16: class basic_bufferstream; Chris@16: Chris@16: ////////////////////////////////////////////////////////////////////////////// Chris@16: // Vectorstream Chris@16: ////////////////////////////////////////////////////////////////////////////// Chris@16: Chris@16: template > Chris@16: class basic_vectorbuf; Chris@16: Chris@16: template > Chris@16: class basic_ivectorstream; Chris@16: Chris@16: template > Chris@16: class basic_ovectorstream; Chris@16: Chris@16: template > Chris@16: class basic_vectorstream; Chris@16: Chris@16: ////////////////////////////////////////////////////////////////////////////// Chris@16: // Smart pointers Chris@16: ////////////////////////////////////////////////////////////////////////////// Chris@16: Chris@16: template Chris@16: class scoped_ptr; Chris@16: Chris@16: template Chris@16: class intrusive_ptr; Chris@16: Chris@16: template Chris@16: class shared_ptr; Chris@16: Chris@16: template Chris@16: class weak_ptr; Chris@16: Chris@16: ////////////////////////////////////////////////////////////////////////////// Chris@16: // IPC Chris@16: ////////////////////////////////////////////////////////////////////////////// Chris@16: Chris@16: template Chris@16: class message_queue_t; Chris@16: Chris@16: typedef message_queue_t > message_queue; Chris@16: Chris@16: }} //namespace boost { namespace interprocess { Chris@16: Chris@16: ////////////////////////////////////////////////////////////////////////////// Chris@16: // CONTAINERS Chris@16: ////////////////////////////////////////////////////////////////////////////// Chris@16: Chris@16: #include Chris@16: Chris@16: #endif //#ifndef BOOST_INTERPROCESS_FWD_HPP