102 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			102 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| //////////////////////////////////////////////////////////////////////////////
 | |
| //
 | |
| // (C) Copyright Ion Gaztanaga 2012-2012. Distributed under the Boost
 | |
| // Software License, Version 1.0. (See accompanying file
 | |
| // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 | |
| //
 | |
| // See http://www.boost.org/libs/interprocess for documentation.
 | |
| //
 | |
| //////////////////////////////////////////////////////////////////////////////
 | |
| 
 | |
| #ifndef BOOST_INTERPROCESS_DETAIL_LOCKS_HPP
 | |
| #define BOOST_INTERPROCESS_DETAIL_LOCKS_HPP
 | |
| 
 | |
| #ifndef BOOST_CONFIG_HPP
 | |
| #  include <boost/config.hpp>
 | |
| #endif
 | |
| #
 | |
| #if defined(BOOST_HAS_PRAGMA_ONCE)
 | |
| #  pragma once
 | |
| #endif
 | |
| 
 | |
| #include <boost/interprocess/detail/config_begin.hpp>
 | |
| #include <boost/interprocess/detail/workaround.hpp>
 | |
| 
 | |
| namespace boost {
 | |
| namespace interprocess {
 | |
| namespace ipcdetail {
 | |
| 
 | |
| template<class Lock>
 | |
| class internal_mutex_lock
 | |
| {
 | |
|    typedef void (internal_mutex_lock::*unspecified_bool_type)();
 | |
|    public:
 | |
| 
 | |
|    typedef typename Lock::mutex_type::internal_mutex_type  mutex_type;
 | |
| 
 | |
| 
 | |
|    internal_mutex_lock(Lock &l)
 | |
|       : l_(l)
 | |
|    {}
 | |
| 
 | |
|    mutex_type* mutex() const
 | |
|    {  return l_ ? &l_.mutex()->internal_mutex() : 0;  }
 | |
| 
 | |
|    void lock()    { l_.lock(); }
 | |
| 
 | |
|    void unlock()  { l_.unlock(); }
 | |
| 
 | |
|    operator unspecified_bool_type() const
 | |
|    {  return l_ ? &internal_mutex_lock::lock : 0;  }
 | |
| 
 | |
|    private:
 | |
|    Lock &l_;
 | |
| };
 | |
| 
 | |
| template <class Lock>
 | |
| class lock_inverter
 | |
| {
 | |
|    Lock &l_;
 | |
|    public:
 | |
|    lock_inverter(Lock &l)
 | |
|       :  l_(l)
 | |
|    {}
 | |
|    void lock()    {   l_.unlock();   }
 | |
|    void unlock()  {   l_.lock();     }
 | |
| };
 | |
| 
 | |
| template <class Lock>
 | |
| class lock_to_sharable
 | |
| {
 | |
|    Lock &l_;
 | |
| 
 | |
|    public:
 | |
|    explicit lock_to_sharable(Lock &l)
 | |
|       :  l_(l)
 | |
|    {}
 | |
|    void lock()    {  l_.lock_sharable();     }
 | |
|    bool try_lock(){  return l_.try_lock_sharable(); }
 | |
|    void unlock()  {  l_.unlock_sharable();   }
 | |
| };
 | |
| 
 | |
| template <class Lock>
 | |
| class lock_to_wait
 | |
| {
 | |
|    Lock &l_;
 | |
| 
 | |
|    public:
 | |
|    explicit lock_to_wait(Lock &l)
 | |
|       :  l_(l)
 | |
|    {}
 | |
|    void lock()    {  l_.wait();     }
 | |
|    bool try_lock(){  return l_.try_wait(); }
 | |
| };
 | |
| 
 | |
| }  //namespace ipcdetail
 | |
| }  //namespace interprocess
 | |
| }  //namespace boost
 | |
| 
 | |
| #include <boost/interprocess/detail/config_end.hpp>
 | |
| 
 | |
| #endif   //BOOST_INTERPROCESS_DETAIL_LOCKS_HPP
 | 
