diff options
Diffstat (limited to 'boost/interprocess/managed_shared_memory.hpp')
-rw-r--r-- | boost/interprocess/managed_shared_memory.hpp | 81 |
1 files changed, 62 insertions, 19 deletions
diff --git a/boost/interprocess/managed_shared_memory.hpp b/boost/interprocess/managed_shared_memory.hpp index 0f74c1a0b9..b58ca51dfc 100644 --- a/boost/interprocess/managed_shared_memory.hpp +++ b/boost/interprocess/managed_shared_memory.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2011. Distributed under the Boost +// (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) // @@ -11,7 +11,7 @@ #ifndef BOOST_INTERPROCESS_MANAGED_SHARED_MEMORY_HPP #define BOOST_INTERPROCESS_MANAGED_SHARED_MEMORY_HPP -#if (defined _MSC_VER) && (_MSC_VER >= 1200) +#if defined(_MSC_VER) # pragma once #endif @@ -25,13 +25,23 @@ #include <boost/interprocess/permissions.hpp> //These includes needed to fulfill default template parameters of //predeclarations in interprocess_fwd.hpp -#include <boost/interprocess/mem_algo/rbtree_best_fit.hpp> +#include <boost/interprocess/mem_algo/rbtree_best_fit.hpp> #include <boost/interprocess/sync/mutex_family.hpp> namespace boost { - namespace interprocess { +namespace ipcdetail { + +template<class AllocationAlgorithm> +struct shmem_open_or_create +{ + typedef ipcdetail::managed_open_or_create_impl + < shared_memory_object, AllocationAlgorithm::Alignment, true, false> type; +}; + +} //namespace ipcdetail { + //!A basic shared memory named object creation class. Initializes the //!shared memory segment. Inherits all basic functionality from //!basic_managed_memory_impl<CharType, AllocationAlgorithm, IndexType>*/ @@ -44,18 +54,14 @@ template class basic_managed_shared_memory : public ipcdetail::basic_managed_memory_impl <CharType, AllocationAlgorithm, IndexType - ,ipcdetail::managed_open_or_create_impl<shared_memory_object - , AllocationAlgorithm::Alignment>::ManagedOpenOrCreateUserOffset> - , private ipcdetail::managed_open_or_create_impl<shared_memory_object - , AllocationAlgorithm::Alignment> + ,ipcdetail::shmem_open_or_create<AllocationAlgorithm>::type::ManagedOpenOrCreateUserOffset> + , private ipcdetail::shmem_open_or_create<AllocationAlgorithm>::type { - /// @cond + #if !defined(BOOST_INTERPROCESS_DOXYGEN_INVOKED) typedef ipcdetail::basic_managed_memory_impl <CharType, AllocationAlgorithm, IndexType, - ipcdetail::managed_open_or_create_impl - < shared_memory_object, AllocationAlgorithm::Alignment>::ManagedOpenOrCreateUserOffset> base_t; - typedef ipcdetail::managed_open_or_create_impl - <shared_memory_object, AllocationAlgorithm::Alignment> base2_t; + ipcdetail::shmem_open_or_create<AllocationAlgorithm>::type::ManagedOpenOrCreateUserOffset> base_t; + typedef typename ipcdetail::shmem_open_or_create<AllocationAlgorithm>::type base2_t; typedef ipcdetail::create_open_func<base_t> create_open_func_t; @@ -69,7 +75,7 @@ class basic_managed_shared_memory private: typedef typename base_t::char_ptr_holder_t char_ptr_holder_t; BOOST_MOVABLE_BUT_NOT_COPYABLE(basic_managed_shared_memory) - /// @endcond + #endif //#ifndef BOOST_INTERPROCESS_DOXYGEN_INVOKED public: //functions @@ -89,7 +95,7 @@ class basic_managed_shared_memory //!Creates shared memory and creates and places the segment manager. //!This can throw. - basic_managed_shared_memory(create_only_t create_only, const char *name, + basic_managed_shared_memory(create_only_t, const char *name, size_type size, const void *addr = 0, const permissions& perm = permissions()) : base_t() , base2_t(create_only, name, size, read_write, addr, @@ -100,7 +106,7 @@ class basic_managed_shared_memory //!segment was not created. If segment was created it connects to the //!segment. //!This can throw. - basic_managed_shared_memory (open_or_create_t open_or_create, + basic_managed_shared_memory (open_or_create_t, const char *name, size_type size, const void *addr = 0, const permissions& perm = permissions()) : base_t() @@ -133,7 +139,7 @@ class basic_managed_shared_memory //!Connects to a created shared memory and its segment manager. //!This can throw. - basic_managed_shared_memory (open_only_t open_only, const char* name, + basic_managed_shared_memory (open_only_t, const char* name, const void *addr = 0) : base_t() , base2_t(open_only, name, read_write, addr, @@ -187,7 +193,7 @@ class basic_managed_shared_memory return base_t::template shrink_to_fit <basic_managed_shared_memory>(shmname); } - /// @cond + #if !defined(BOOST_INTERPROCESS_DOXYGEN_INVOKED) //!Tries to find a previous named allocation address. Returns a memory //!buffer and the object count. If not found returned pointer is 0. @@ -203,9 +209,46 @@ class basic_managed_shared_memory } } - /// @endcond + #endif //#ifndef BOOST_INTERPROCESS_DOXYGEN_INVOKED }; +#ifdef BOOST_INTERPROCESS_DOXYGEN_INVOKED + +//!Typedef for a default basic_managed_shared_memory +//!of narrow characters +typedef basic_managed_shared_memory + <char + ,rbtree_best_fit<mutex_family> + ,iset_index> +managed_shared_memory; + +//!Typedef for a default basic_managed_shared_memory +//!of wide characters +typedef basic_managed_shared_memory + <wchar_t + ,rbtree_best_fit<mutex_family> + ,iset_index> +wmanaged_shared_memory; + +//!Typedef for a default basic_managed_shared_memory +//!of narrow characters to be placed in a fixed address +typedef basic_managed_shared_memory + <char + ,rbtree_best_fit<mutex_family, void*> + ,iset_index> +fixed_managed_shared_memory; + +//!Typedef for a default basic_managed_shared_memory +//!of narrow characters to be placed in a fixed address +typedef basic_managed_shared_memory + <wchar_t + ,rbtree_best_fit<mutex_family, void*> + ,iset_index> +wfixed_managed_shared_memory; + + +#endif //#ifdef BOOST_INTERPROCESS_DOXYGEN_INVOKED + } //namespace interprocess { } //namespace boost { |