annotate DEPENDENCIES/generic/include/boost/interprocess/sync/windows/named_mutex.hpp @ 125:34e428693f5d vext

Vext -> Repoint
author Chris Cannam
date Thu, 14 Jun 2018 11:15:39 +0100
parents c530137014c0
children
rev   line source
Chris@16 1 //////////////////////////////////////////////////////////////////////////////
Chris@16 2 //
Chris@16 3 // (C) Copyright Ion Gaztanaga 2011-2012. Distributed under the Boost
Chris@16 4 // Software License, Version 1.0. (See accompanying file
Chris@16 5 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
Chris@16 6 //
Chris@16 7 // See http://www.boost.org/libs/interprocess for documentation.
Chris@16 8 //
Chris@16 9 //////////////////////////////////////////////////////////////////////////////
Chris@16 10 #ifndef BOOST_INTERPROCESS_WINDOWS_NAMED_MUTEX_HPP
Chris@16 11 #define BOOST_INTERPROCESS_WINDOWS_NAMED_MUTEX_HPP
Chris@16 12
Chris@101 13 #ifndef BOOST_CONFIG_HPP
Chris@101 14 # include <boost/config.hpp>
Chris@101 15 #endif
Chris@101 16 #
Chris@101 17 #if defined(BOOST_HAS_PRAGMA_ONCE)
Chris@16 18 # pragma once
Chris@16 19 #endif
Chris@16 20
Chris@16 21 #include <boost/interprocess/detail/config_begin.hpp>
Chris@16 22 #include <boost/interprocess/detail/workaround.hpp>
Chris@16 23 #include <boost/interprocess/creation_tags.hpp>
Chris@16 24 #include <boost/interprocess/permissions.hpp>
Chris@16 25 #include <boost/interprocess/detail/interprocess_tester.hpp>
Chris@16 26 #include <boost/interprocess/detail/posix_time_types_wrk.hpp>
Chris@16 27 #include <boost/interprocess/sync/windows/sync_utils.hpp>
Chris@16 28 #include <boost/interprocess/sync/windows/named_sync.hpp>
Chris@16 29 #include <boost/interprocess/sync/windows/winapi_mutex_wrapper.hpp>
Chris@16 30 #include <boost/interprocess/errors.hpp>
Chris@16 31 #include <boost/interprocess/exceptions.hpp>
Chris@16 32 #include <limits>
Chris@16 33
Chris@16 34 namespace boost {
Chris@16 35 namespace interprocess {
Chris@16 36 namespace ipcdetail {
Chris@16 37
Chris@16 38
Chris@16 39
Chris@16 40 class windows_named_mutex
Chris@16 41 {
Chris@101 42 #if !defined(BOOST_INTERPROCESS_DOXYGEN_INVOKED)
Chris@16 43
Chris@16 44 //Non-copyable
Chris@16 45 windows_named_mutex();
Chris@16 46 windows_named_mutex(const windows_named_mutex &);
Chris@16 47 windows_named_mutex &operator=(const windows_named_mutex &);
Chris@101 48 #endif //#ifndef BOOST_INTERPROCESS_DOXYGEN_INVOKED
Chris@16 49
Chris@16 50 public:
Chris@16 51 windows_named_mutex(create_only_t, const char *name, const permissions &perm = permissions());
Chris@16 52
Chris@16 53 windows_named_mutex(open_or_create_t, const char *name, const permissions &perm = permissions());
Chris@16 54
Chris@16 55 windows_named_mutex(open_only_t, const char *name);
Chris@16 56
Chris@16 57 ~windows_named_mutex();
Chris@16 58
Chris@16 59 void unlock();
Chris@16 60 void lock();
Chris@16 61 bool try_lock();
Chris@16 62 bool timed_lock(const boost::posix_time::ptime &abs_time);
Chris@16 63
Chris@16 64 static bool remove(const char *name);
Chris@16 65
Chris@101 66 #if !defined(BOOST_INTERPROCESS_DOXYGEN_INVOKED)
Chris@16 67 private:
Chris@16 68 friend class interprocess_tester;
Chris@16 69 void dont_close_on_destruction();
Chris@16 70 winapi_mutex_wrapper m_mtx_wrapper;
Chris@16 71 windows_named_sync m_named_sync;
Chris@16 72
Chris@16 73 class named_mut_callbacks : public windows_named_sync_interface
Chris@16 74 {
Chris@16 75 public:
Chris@16 76 named_mut_callbacks(winapi_mutex_wrapper &mtx_wrapper)
Chris@16 77 : m_mtx_wrapper(mtx_wrapper)
Chris@16 78 {}
Chris@16 79
Chris@16 80 virtual std::size_t get_data_size() const
Chris@16 81 { return 0u; }
Chris@16 82
Chris@16 83 virtual const void *buffer_with_init_data_to_file()
Chris@16 84 { return 0; }
Chris@16 85
Chris@16 86 virtual const void *buffer_with_final_data_to_file()
Chris@16 87 { return 0; }
Chris@16 88
Chris@16 89 virtual void *buffer_to_store_init_data_from_file()
Chris@16 90 { return 0; }
Chris@16 91
Chris@16 92 virtual bool open(create_enum_t, const char *id_name)
Chris@16 93 {
Chris@16 94 std::string aux_str = "Global\\bipc.mut.";
Chris@16 95 aux_str += id_name;
Chris@16 96 //
Chris@16 97 permissions mut_perm;
Chris@16 98 mut_perm.set_unrestricted();
Chris@16 99 return m_mtx_wrapper.open_or_create(aux_str.c_str(), mut_perm);
Chris@16 100 }
Chris@16 101
Chris@16 102 virtual void close()
Chris@16 103 {
Chris@16 104 m_mtx_wrapper.close();
Chris@16 105 }
Chris@16 106
Chris@16 107 virtual ~named_mut_callbacks()
Chris@16 108 {}
Chris@16 109
Chris@16 110 private:
Chris@16 111 winapi_mutex_wrapper& m_mtx_wrapper;
Chris@16 112 };
Chris@101 113 #endif //#ifndef BOOST_INTERPROCESS_DOXYGEN_INVOKED
Chris@16 114 };
Chris@16 115
Chris@16 116 inline windows_named_mutex::~windows_named_mutex()
Chris@16 117 {
Chris@16 118 named_mut_callbacks callbacks(m_mtx_wrapper);
Chris@16 119 m_named_sync.close(callbacks);
Chris@16 120 }
Chris@16 121
Chris@16 122 inline void windows_named_mutex::dont_close_on_destruction()
Chris@16 123 {}
Chris@16 124
Chris@16 125 inline windows_named_mutex::windows_named_mutex
Chris@16 126 (create_only_t, const char *name, const permissions &perm)
Chris@16 127 : m_mtx_wrapper()
Chris@16 128 {
Chris@16 129 named_mut_callbacks callbacks(m_mtx_wrapper);
Chris@16 130 m_named_sync.open_or_create(DoCreate, name, perm, callbacks);
Chris@16 131 }
Chris@16 132
Chris@16 133 inline windows_named_mutex::windows_named_mutex
Chris@16 134 (open_or_create_t, const char *name, const permissions &perm)
Chris@16 135 : m_mtx_wrapper()
Chris@16 136 {
Chris@16 137 named_mut_callbacks callbacks(m_mtx_wrapper);
Chris@16 138 m_named_sync.open_or_create(DoOpenOrCreate, name, perm, callbacks);
Chris@16 139 }
Chris@16 140
Chris@16 141 inline windows_named_mutex::windows_named_mutex(open_only_t, const char *name)
Chris@16 142 : m_mtx_wrapper()
Chris@16 143 {
Chris@16 144 named_mut_callbacks callbacks(m_mtx_wrapper);
Chris@16 145 m_named_sync.open_or_create(DoOpen, name, permissions(), callbacks);
Chris@16 146 }
Chris@16 147
Chris@16 148 inline void windows_named_mutex::unlock()
Chris@16 149 {
Chris@16 150 m_mtx_wrapper.unlock();
Chris@16 151 }
Chris@16 152
Chris@16 153 inline void windows_named_mutex::lock()
Chris@16 154 {
Chris@16 155 m_mtx_wrapper.lock();
Chris@16 156 }
Chris@16 157
Chris@16 158 inline bool windows_named_mutex::try_lock()
Chris@16 159 {
Chris@16 160 return m_mtx_wrapper.try_lock();
Chris@16 161 }
Chris@16 162
Chris@16 163 inline bool windows_named_mutex::timed_lock(const boost::posix_time::ptime &abs_time)
Chris@16 164 {
Chris@16 165 return m_mtx_wrapper.timed_lock(abs_time);
Chris@16 166 }
Chris@16 167
Chris@16 168 inline bool windows_named_mutex::remove(const char *name)
Chris@16 169 {
Chris@16 170 return windows_named_sync::remove(name);
Chris@16 171 }
Chris@16 172
Chris@16 173 } //namespace ipcdetail {
Chris@16 174 } //namespace interprocess {
Chris@16 175 } //namespace boost {
Chris@16 176
Chris@16 177 #include <boost/interprocess/detail/config_end.hpp>
Chris@16 178
Chris@16 179 #endif //BOOST_INTERPROCESS_WINDOWS_NAMED_MUTEX_HPP