annotate DEPENDENCIES/generic/include/boost/interprocess/sync/detail/locks.hpp @ 133:4acb5d8d80b6 tip

Don't fail environmental check if README.md exists (but .txt and no-suffix don't)
author Chris Cannam
date Tue, 30 Jul 2019 12:25:44 +0100
parents c530137014c0
children
rev   line source
Chris@16 1 //////////////////////////////////////////////////////////////////////////////
Chris@16 2 //
Chris@16 3 // (C) Copyright Ion Gaztanaga 2012-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
Chris@16 11 #ifndef BOOST_INTERPROCESS_DETAIL_LOCKS_HPP
Chris@16 12 #define BOOST_INTERPROCESS_DETAIL_LOCKS_HPP
Chris@16 13
Chris@101 14 #ifndef BOOST_CONFIG_HPP
Chris@101 15 # include <boost/config.hpp>
Chris@101 16 #endif
Chris@101 17 #
Chris@101 18 #if defined(BOOST_HAS_PRAGMA_ONCE)
Chris@101 19 # pragma once
Chris@101 20 #endif
Chris@101 21
Chris@16 22 #include <boost/interprocess/detail/config_begin.hpp>
Chris@16 23 #include <boost/interprocess/detail/workaround.hpp>
Chris@16 24
Chris@16 25 namespace boost {
Chris@16 26 namespace interprocess {
Chris@16 27 namespace ipcdetail {
Chris@16 28
Chris@16 29 template<class Lock>
Chris@16 30 class internal_mutex_lock
Chris@16 31 {
Chris@16 32 typedef void (internal_mutex_lock::*unspecified_bool_type)();
Chris@16 33 public:
Chris@16 34
Chris@16 35 typedef typename Lock::mutex_type::internal_mutex_type mutex_type;
Chris@101 36
Chris@16 37
Chris@16 38 internal_mutex_lock(Lock &l)
Chris@16 39 : l_(l)
Chris@16 40 {}
Chris@16 41
Chris@16 42 mutex_type* mutex() const
Chris@16 43 { return l_ ? &l_.mutex()->internal_mutex() : 0; }
Chris@16 44
Chris@16 45 void lock() { l_.lock(); }
Chris@16 46
Chris@16 47 void unlock() { l_.unlock(); }
Chris@16 48
Chris@16 49 operator unspecified_bool_type() const
Chris@16 50 { return l_ ? &internal_mutex_lock::lock : 0; }
Chris@16 51
Chris@16 52 private:
Chris@16 53 Lock &l_;
Chris@16 54 };
Chris@16 55
Chris@16 56 template <class Lock>
Chris@16 57 class lock_inverter
Chris@16 58 {
Chris@16 59 Lock &l_;
Chris@16 60 public:
Chris@16 61 lock_inverter(Lock &l)
Chris@16 62 : l_(l)
Chris@16 63 {}
Chris@16 64 void lock() { l_.unlock(); }
Chris@16 65 void unlock() { l_.lock(); }
Chris@16 66 };
Chris@16 67
Chris@101 68 template <class Lock>
Chris@101 69 class lock_to_sharable
Chris@101 70 {
Chris@101 71 Lock &l_;
Chris@101 72
Chris@101 73 public:
Chris@101 74 explicit lock_to_sharable(Lock &l)
Chris@101 75 : l_(l)
Chris@101 76 {}
Chris@101 77 void lock() { l_.lock_sharable(); }
Chris@101 78 bool try_lock(){ return l_.try_lock_sharable(); }
Chris@101 79 void unlock() { l_.unlock_sharable(); }
Chris@101 80 };
Chris@101 81
Chris@101 82 template <class Lock>
Chris@101 83 class lock_to_wait
Chris@101 84 {
Chris@101 85 Lock &l_;
Chris@101 86
Chris@101 87 public:
Chris@101 88 explicit lock_to_wait(Lock &l)
Chris@101 89 : l_(l)
Chris@101 90 {}
Chris@101 91 void lock() { l_.wait(); }
Chris@101 92 bool try_lock(){ return l_.try_wait(); }
Chris@101 93 };
Chris@101 94
Chris@16 95 } //namespace ipcdetail
Chris@16 96 } //namespace interprocess
Chris@16 97 } //namespace boost
Chris@16 98
Chris@16 99 #include <boost/interprocess/detail/config_end.hpp>
Chris@16 100
Chris@16 101 #endif //BOOST_INTERPROCESS_DETAIL_LOCKS_HPP