]> git.proxmox.com Git - ceph.git/blobdiff - ceph/src/boost/boost/interprocess/managed_mapped_file.hpp
update ceph source to reef 18.1.2
[ceph.git] / ceph / src / boost / boost / interprocess / managed_mapped_file.hpp
index 14ec160614bc5fd9b8a61613ef99e1502b864095..daca6adaa0d52c5ffa94a07ba4a58fdd2e624cbb 100644 (file)
@@ -38,11 +38,29 @@ namespace boost {
 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 {
@@ -59,15 +77,17 @@ template
 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:
@@ -90,7 +110,7 @@ class basic_managed_mapped_file
 
    //!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.
@@ -142,16 +162,84 @@ class basic_managed_mapped_file
                 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);
@@ -169,7 +257,7 @@ class basic_managed_mapped_file
 
    //!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);
@@ -201,6 +289,37 @@ class basic_managed_mapped_file
          <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
@@ -218,7 +337,8 @@ class basic_managed_mapped_file
    }
 
    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
 };