summaryrefslogtreecommitdiff
path: root/boost/interprocess/managed_external_buffer.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'boost/interprocess/managed_external_buffer.hpp')
-rw-r--r--boost/interprocess/managed_external_buffer.hpp113
1 files changed, 113 insertions, 0 deletions
diff --git a/boost/interprocess/managed_external_buffer.hpp b/boost/interprocess/managed_external_buffer.hpp
new file mode 100644
index 0000000000..a2cf47f4e6
--- /dev/null
+++ b/boost/interprocess/managed_external_buffer.hpp
@@ -0,0 +1,113 @@
+//////////////////////////////////////////////////////////////////////////////
+//
+// (C) Copyright Ion Gaztanaga 2005-2011. 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_MANAGED_EXTERNAL_BUFFER_HPP
+#define BOOST_INTERPROCESS_MANAGED_EXTERNAL_BUFFER_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 <boost/interprocess/creation_tags.hpp>
+#include <boost/interprocess/detail/managed_memory_impl.hpp>
+#include <boost/move/move.hpp>
+#include <boost/assert.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/sync/mutex_family.hpp>
+#include <boost/interprocess/indexes/iset_index.hpp>
+
+//!\file
+//!Describes a named user memory allocation user class.
+
+namespace boost {
+namespace interprocess {
+
+//!A basic user memory named object creation class. Inherits all
+//!basic functionality from
+//!basic_managed_memory_impl<CharType, AllocationAlgorithm, IndexType>*/
+template
+ <
+ class CharType,
+ class AllocationAlgorithm,
+ template<class IndexConfig> class IndexType
+ >
+class basic_managed_external_buffer
+ : public ipcdetail::basic_managed_memory_impl <CharType, AllocationAlgorithm, IndexType>
+{
+ /// @cond
+ typedef ipcdetail::basic_managed_memory_impl
+ <CharType, AllocationAlgorithm, IndexType> base_t;
+ BOOST_MOVABLE_BUT_NOT_COPYABLE(basic_managed_external_buffer)
+ /// @endcond
+
+ public:
+ typedef typename base_t::size_type size_type;
+
+ //!Default constructor. Does nothing.
+ //!Useful in combination with move semantics
+ basic_managed_external_buffer()
+ {}
+
+ //!Creates and places the segment manager. This can throw
+ basic_managed_external_buffer
+ (create_only_t, void *addr, size_type size)
+ {
+ //Check if alignment is correct
+ BOOST_ASSERT((0 == (((std::size_t)addr) & (AllocationAlgorithm::Alignment - size_type(1u)))));
+ if(!base_t::create_impl(addr, size)){
+ throw interprocess_exception("Could not initialize buffer in basic_managed_external_buffer constructor");
+ }
+ }
+
+ //!Creates and places the segment manager. This can throw
+ basic_managed_external_buffer
+ (open_only_t, void *addr, size_type size)
+ {
+ //Check if alignment is correct
+ BOOST_ASSERT((0 == (((std::size_t)addr) & (AllocationAlgorithm::Alignment - size_type(1u)))));
+ if(!base_t::open_impl(addr, size)){
+ throw interprocess_exception("Could not initialize buffer in basic_managed_external_buffer constructor");
+ }
+ }
+
+ //!Moves the ownership of "moved"'s managed memory to *this. Does not throw
+ basic_managed_external_buffer(BOOST_RV_REF(basic_managed_external_buffer) moved)
+ {
+ this->swap(moved);
+ }
+
+ //!Moves the ownership of "moved"'s managed memory to *this. Does not throw
+ basic_managed_external_buffer &operator=(BOOST_RV_REF(basic_managed_external_buffer) moved)
+ {
+ basic_managed_external_buffer tmp(boost::move(moved));
+ this->swap(tmp);
+ return *this;
+ }
+
+ void grow(size_type extra_bytes)
+ { base_t::grow(extra_bytes); }
+
+ //!Swaps the ownership of the managed heap memories managed by *this and other.
+ //!Never throws.
+ void swap(basic_managed_external_buffer &other)
+ { base_t::swap(other); }
+};
+
+} //namespace interprocess {
+} //namespace boost {
+
+#include <boost/interprocess/detail/config_end.hpp>
+
+#endif //BOOST_INTERPROCESS_MANAGED_EXTERNAL_BUFFER_HPP
+