namespace interprocess {
namespace ipcdetail {
-template<class AllocationAlgorithm>
+template
+ <
+ class CharType,
+ class AllocationAlgorithm,
+ template<class IndexConfig> class IndexType
+ >
struct mfile_open_or_create
{
+ static const std::size_t segment_manager_alignment = boost::move_detail::alignment_of
+ < segment_manager
+ < CharType
+ , AllocationAlgorithm
+ , IndexType>
+ >::value;
+ static const std::size_t final_segment_manager_alignment
+ = segment_manager_alignment > AllocationAlgorithm::Alignment
+ ? segment_manager_alignment : AllocationAlgorithm::Alignment;
+
typedef ipcdetail::managed_open_or_create_impl
- < file_wrapper, AllocationAlgorithm::Alignment, true, false> type;
+ < file_wrapper
+ , final_segment_manager_alignment
+ , true
+ , false> type;
};
} //namespace ipcdetail {
class basic_managed_mapped_file
#if !defined(BOOST_INTERPROCESS_DOXYGEN_INVOKED)
: public ipcdetail::basic_managed_memory_impl
- <CharType, AllocationAlgorithm, IndexType
- ,ipcdetail::mfile_open_or_create<AllocationAlgorithm>::type::ManagedOpenOrCreateUserOffset>
+ < CharType, AllocationAlgorithm, IndexType
+ , ipcdetail::mfile_open_or_create
+ <CharType, AllocationAlgorithm, IndexType>::type::ManagedOpenOrCreateUserOffset>
#endif //#ifndef BOOST_INTERPROCESS_DOXYGEN_INVOKED
{
#if !defined(BOOST_INTERPROCESS_DOXYGEN_INVOKED)
public:
typedef ipcdetail::basic_managed_memory_impl
<CharType, AllocationAlgorithm, IndexType,
- ipcdetail::mfile_open_or_create<AllocationAlgorithm>::type::ManagedOpenOrCreateUserOffset> base_t;
+ ipcdetail::mfile_open_or_create<CharType, AllocationAlgorithm, IndexType>
+ ::type::ManagedOpenOrCreateUserOffset> base_t;
typedef ipcdetail::file_wrapper device_type;
private:
//!Creates mapped file and creates and places the segment manager.
//!This can throw.
- basic_managed_mapped_file()
+ basic_managed_mapped_file() BOOST_NOEXCEPT
{}
//!Creates mapped file and creates and places the segment manager.
ipcdetail::DoOpen))
{}
+ #if defined(BOOST_INTERPROCESS_WCHAR_NAMED_RESOURCES) || defined(BOOST_INTERPROCESS_DOXYGEN_INVOKED)
+
+ //!Creates mapped file and creates and places the segment manager.
+ //!This can throw.
+ //!
+ //!Note: This function is only available on operating systems with
+ //! native wchar_t APIs (e.g. Windows).
+ basic_managed_mapped_file(create_only_t, const wchar_t *name,
+ size_type size, const void *addr = 0, const permissions &perm = permissions())
+ : m_mfile(create_only, name, size, read_write, addr,
+ create_open_func_t(get_this_pointer(), ipcdetail::DoCreate), perm)
+ {}
+
+ //!Creates mapped file and creates and places the segment manager if
+ //!segment was not created. If segment was created it connects to the
+ //!segment.
+ //!This can throw.
+ //!
+ //!Note: This function is only available on operating systems with
+ //! native wchar_t APIs (e.g. Windows).
+ basic_managed_mapped_file (open_or_create_t,
+ const wchar_t *name, size_type size,
+ const void *addr = 0, const permissions &perm = permissions())
+ : m_mfile(open_or_create, name, size, read_write, addr,
+ create_open_func_t(get_this_pointer(),
+ ipcdetail::DoOpenOrCreate), perm)
+ {}
+
+ //!Connects to a created mapped file and its segment manager.
+ //!This can throw.
+ //!
+ //!Note: This function is only available on operating systems with
+ //! native wchar_t APIs (e.g. Windows).
+ basic_managed_mapped_file (open_only_t, const wchar_t* name,
+ const void *addr = 0)
+ : m_mfile(open_only, name, read_write, addr,
+ create_open_func_t(get_this_pointer(),
+ ipcdetail::DoOpen))
+ {}
+
+ //!Connects to a created mapped file and its segment manager
+ //!in copy_on_write mode.
+ //!This can throw.
+ //!
+ //!Note: This function is only available on operating systems with
+ //! native wchar_t APIs (e.g. Windows).
+ basic_managed_mapped_file (open_copy_on_write_t, const wchar_t* name,
+ const void *addr = 0)
+ : m_mfile(open_only, name, copy_on_write, addr,
+ create_open_func_t(get_this_pointer(),
+ ipcdetail::DoOpen))
+ {}
+
+ //!Connects to a created mapped file and its segment manager
+ //!in read-only mode.
+ //!This can throw.
+ //!
+ //!Note: This function is only available on operating systems with
+ //! native wchar_t APIs (e.g. Windows).
+ basic_managed_mapped_file (open_read_only_t, const wchar_t* name,
+ const void *addr = 0)
+ : m_mfile(open_only, name, read_only, addr,
+ create_open_func_t(get_this_pointer(),
+ ipcdetail::DoOpen))
+ {}
+
+ #endif //defined(BOOST_INTERPROCESS_WCHAR_NAMED_RESOURCES) || defined(BOOST_INTERPROCESS_DOXYGEN_INVOKED)
+
//!Moves the ownership of "moved"'s managed memory to *this.
//!Does not throw
- basic_managed_mapped_file(BOOST_RV_REF(basic_managed_mapped_file) moved)
+ basic_managed_mapped_file(BOOST_RV_REF(basic_managed_mapped_file) moved) BOOST_NOEXCEPT
{
this->swap(moved);
}
//!Moves the ownership of "moved"'s managed memory to *this.
//!Does not throw
- basic_managed_mapped_file &operator=(BOOST_RV_REF(basic_managed_mapped_file) moved)
+ basic_managed_mapped_file &operator=(BOOST_RV_REF(basic_managed_mapped_file) moved) BOOST_NOEXCEPT
{
basic_managed_mapped_file tmp(boost::move(moved));
this->swap(tmp);
//!Swaps the ownership of the managed mapped memories managed by *this and other.
//!Never throws.
- void swap(basic_managed_mapped_file &other)
+ void swap(basic_managed_mapped_file &other) BOOST_NOEXCEPT
{
base_t::swap(other);
m_mfile.swap(other.m_mfile);
<basic_managed_mapped_file>(filename);
}
+ #if defined(BOOST_INTERPROCESS_WCHAR_NAMED_RESOURCES) || defined(BOOST_INTERPROCESS_DOXYGEN_INVOKED)
+
+ //!Tries to resize mapped file so that we have room for
+ //!more objects.
+ //!
+ //!This function is not synchronized so no other thread or process should
+ //!be reading or writing the file
+ //!
+ //!Note: This function is only available on operating systems with
+ //! native wchar_t APIs (e.g. Windows).
+ static bool grow(const wchar_t *filename, size_type extra_bytes)
+ {
+ return base_t::template grow
+ <basic_managed_mapped_file>(filename, extra_bytes);
+ }
+
+ //!Tries to resize mapped file to minimized the size of the file.
+ //!
+ //!This function is not synchronized so no other thread or process should
+ //!be reading or writing the file
+ //!
+ //!Note: This function is only available on operating systems with
+ //! native wchar_t APIs (e.g. Windows).
+ static bool shrink_to_fit(const wchar_t *filename)
+ {
+ return base_t::template shrink_to_fit
+ <basic_managed_mapped_file>(filename);
+ }
+
+ #endif
+
#if !defined(BOOST_INTERPROCESS_DOXYGEN_INVOKED)
//!Tries to find a previous named allocation address. Returns a memory
}
private:
- typename ipcdetail::mfile_open_or_create<AllocationAlgorithm>::type m_mfile;
+ typename ipcdetail::mfile_open_or_create
+ <CharType, AllocationAlgorithm, IndexType>::type m_mfile;
#endif //#ifndef BOOST_INTERPROCESS_DOXYGEN_INVOKED
};