File indexing completed on 2026-05-08 08:23:10
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011 #ifndef BOOST_INTERPROCESS_MANAGED_EXTERNAL_BUFFER_HPP
0012 #define BOOST_INTERPROCESS_MANAGED_EXTERNAL_BUFFER_HPP
0013
0014 #ifndef BOOST_CONFIG_HPP
0015 # include <boost/config.hpp>
0016 #endif
0017 0018 ">#
0019 #if defined(BOOST_HAS_PRAGMA_ONCE)
0020 # pragma once
0021 #endif
0022
0023 #include <boost/interprocess/detail/config_begin.hpp>
0024 #include <boost/interprocess/detail/workaround.hpp>
0025 #include <boost/interprocess/creation_tags.hpp>
0026 #include <boost/interprocess/detail/managed_memory_impl.hpp>
0027 #include <boost/move/utility_core.hpp>
0028 #include <boost/assert.hpp>
0029
0030
0031 #include <boost/interprocess/mem_algo/rbtree_best_fit.hpp>
0032 #include <boost/interprocess/sync/mutex_family.hpp>
0033 #include <boost/interprocess/indexes/iset_index.hpp>
0034
0035
0036
0037
0038 namespace boost {
0039 namespace interprocess {
0040
0041
0042
0043
0044 template
0045 <
0046 class CharType,
0047 class AllocationAlgorithm,
0048 template<class IndexConfig> class IndexType
0049 >
0050 class basic_managed_external_buffer
0051 : public ipcdetail::basic_managed_memory_impl <CharType, AllocationAlgorithm, IndexType>
0052 {
0053 #if !defined(BOOST_INTERPROCESS_DOXYGEN_INVOKED)
0054 typedef ipcdetail::basic_managed_memory_impl
0055 <CharType, AllocationAlgorithm, IndexType> base_t;
0056 BOOST_MOVABLE_BUT_NOT_COPYABLE(basic_managed_external_buffer)
0057 #endif
0058
0059 public:
0060 typedef typename base_t::size_type size_type;
0061
0062
0063
0064 basic_managed_external_buffer() BOOST_NOEXCEPT
0065 {}
0066
0067
0068
0069
0070
0071 basic_managed_external_buffer
0072 (create_only_t, void *addr, size_type size)
0073 {
0074
0075 BOOST_ASSERT((0 == (((std::size_t)addr) & (AllocationAlgorithm::Alignment - size_type(1u)))));
0076 if(!base_t::create_impl(addr, size)){
0077 throw interprocess_exception("Could not initialize buffer in basic_managed_external_buffer constructor");
0078 }
0079 }
0080
0081
0082
0083
0084
0085 basic_managed_external_buffer
0086 (open_only_t, void *addr, size_type size)
0087 {
0088
0089 BOOST_ASSERT((0 == (((std::size_t)addr) & (AllocationAlgorithm::Alignment - size_type(1u)))));
0090 if(!base_t::open_impl(addr, size)){
0091 throw interprocess_exception("Could not initialize buffer in basic_managed_external_buffer constructor");
0092 }
0093 }
0094
0095
0096 basic_managed_external_buffer(BOOST_RV_REF(basic_managed_external_buffer) moved) BOOST_NOEXCEPT
0097 {
0098 this->swap(moved);
0099 }
0100
0101
0102 basic_managed_external_buffer &operator=(BOOST_RV_REF(basic_managed_external_buffer) moved) BOOST_NOEXCEPT
0103 {
0104 basic_managed_external_buffer tmp(boost::move(moved));
0105 this->swap(tmp);
0106 return *this;
0107 }
0108
0109
0110
0111 void grow(size_type extra_bytes)
0112 { base_t::grow(extra_bytes); }
0113
0114
0115
0116 void swap(basic_managed_external_buffer &other) BOOST_NOEXCEPT
0117 { base_t::swap(other); }
0118 };
0119
0120 #ifdef BOOST_INTERPROCESS_DOXYGEN_INVOKED
0121
0122
0123
0124 typedef basic_managed_external_buffer
0125 <char
0126 ,rbtree_best_fit<null_mutex_family>
0127 ,iset_index>
0128 managed_external_buffer;
0129
0130
0131
0132 typedef basic_managed_external_buffer
0133 <wchar_t
0134 ,rbtree_best_fit<null_mutex_family>
0135 ,iset_index>
0136 wmanaged_external_buffer;
0137
0138 #endif
0139
0140 }
0141 }
0142
0143 #include <boost/interprocess/detail/config_end.hpp>
0144
0145 #endif
0146