annotate DEPENDENCIES/generic/include/boost/interprocess/sync/windows/condition.hpp @ 16:2665513ce2d3

Add boost headers
author Chris Cannam
date Tue, 05 Aug 2014 11:11:38 +0100
parents
children c530137014c0
rev   line source
Chris@16 1 //////////////////////////////////////////////////////////////////////////////
Chris@16 2 //
Chris@16 3 // (C) Copyright Ion Gaztanaga 2005-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_WINDOWS_CONDITION_HPP
Chris@16 12 #define BOOST_INTERPROCESS_DETAIL_WINDOWS_CONDITION_HPP
Chris@16 13
Chris@16 14 #include <boost/interprocess/detail/config_begin.hpp>
Chris@16 15 #include <boost/interprocess/detail/workaround.hpp>
Chris@16 16 #include <boost/interprocess/detail/posix_time_types_wrk.hpp>
Chris@16 17
Chris@16 18 #include <boost/interprocess/sync/interprocess_mutex.hpp>
Chris@16 19 #include <boost/interprocess/sync/scoped_lock.hpp>
Chris@16 20 #include <boost/interprocess/exceptions.hpp>
Chris@16 21 #include <boost/interprocess/sync/windows/semaphore.hpp>
Chris@16 22 #include <boost/interprocess/sync/windows/mutex.hpp>
Chris@16 23 #include <boost/interprocess/sync/detail/condition_algorithm_8a.hpp>
Chris@16 24
Chris@16 25
Chris@16 26 namespace boost {
Chris@16 27 namespace interprocess {
Chris@16 28 namespace ipcdetail {
Chris@16 29
Chris@16 30 class windows_condition
Chris@16 31 {
Chris@16 32 windows_condition(const windows_condition &);
Chris@16 33 windows_condition &operator=(const windows_condition &);
Chris@16 34
Chris@16 35 public:
Chris@16 36 windows_condition()
Chris@16 37 : m_condition_data()
Chris@16 38 {}
Chris@16 39
Chris@16 40 ~windows_condition()
Chris@16 41 {}
Chris@16 42
Chris@16 43 void notify_one()
Chris@16 44 { m_condition_data.notify_one(); }
Chris@16 45
Chris@16 46 void notify_all()
Chris@16 47 { m_condition_data.notify_all(); }
Chris@16 48
Chris@16 49 template <typename L>
Chris@16 50 bool timed_wait(L& lock, const boost::posix_time::ptime &abs_time)
Chris@16 51 { return m_condition_data.timed_wait(lock, abs_time); }
Chris@16 52
Chris@16 53 template <typename L, typename Pr>
Chris@16 54 bool timed_wait(L& lock, const boost::posix_time::ptime &abs_time, Pr pred)
Chris@16 55 { return m_condition_data.timed_wait(lock, abs_time, pred); }
Chris@16 56
Chris@16 57 template <typename L>
Chris@16 58 void wait(L& lock)
Chris@16 59 { m_condition_data.wait(lock); }
Chris@16 60
Chris@16 61 template <typename L, typename Pr>
Chris@16 62 void wait(L& lock, Pr pred)
Chris@16 63 { m_condition_data.wait(lock, pred); }
Chris@16 64
Chris@16 65 private:
Chris@16 66
Chris@16 67 struct condition_data
Chris@16 68 {
Chris@16 69 typedef boost::int32_t integer_type;
Chris@16 70 typedef windows_semaphore semaphore_type;
Chris@16 71 typedef windows_mutex mutex_type;
Chris@16 72
Chris@16 73 condition_data()
Chris@16 74 : m_nwaiters_blocked(0)
Chris@16 75 , m_nwaiters_gone(0)
Chris@16 76 , m_nwaiters_to_unblock(0)
Chris@16 77 , m_sem_block_queue(0)
Chris@16 78 , m_sem_block_lock(1)
Chris@16 79 , m_mtx_unblock_lock()
Chris@16 80 {}
Chris@16 81
Chris@16 82 integer_type &get_nwaiters_blocked()
Chris@16 83 { return m_nwaiters_blocked; }
Chris@16 84
Chris@16 85 integer_type &get_nwaiters_gone()
Chris@16 86 { return m_nwaiters_gone; }
Chris@16 87
Chris@16 88 integer_type &get_nwaiters_to_unblock()
Chris@16 89 { return m_nwaiters_to_unblock; }
Chris@16 90
Chris@16 91 semaphore_type &get_sem_block_queue()
Chris@16 92 { return m_sem_block_queue; }
Chris@16 93
Chris@16 94 semaphore_type &get_sem_block_lock()
Chris@16 95 { return m_sem_block_lock; }
Chris@16 96
Chris@16 97 mutex_type &get_mtx_unblock_lock()
Chris@16 98 { return m_mtx_unblock_lock; }
Chris@16 99
Chris@16 100 boost::int32_t m_nwaiters_blocked;
Chris@16 101 boost::int32_t m_nwaiters_gone;
Chris@16 102 boost::int32_t m_nwaiters_to_unblock;
Chris@16 103 windows_semaphore m_sem_block_queue;
Chris@16 104 windows_semaphore m_sem_block_lock;
Chris@16 105 windows_mutex m_mtx_unblock_lock;
Chris@16 106 };
Chris@16 107
Chris@16 108 ipcdetail::condition_8a_wrapper<condition_data> m_condition_data;
Chris@16 109 };
Chris@16 110
Chris@16 111 } //namespace ipcdetail
Chris@16 112 } //namespace interprocess
Chris@16 113 } //namespace boost
Chris@16 114
Chris@16 115 #include <boost/interprocess/detail/config_end.hpp>
Chris@16 116
Chris@16 117 #endif //BOOST_INTERPROCESS_DETAIL_WINDOWS_CONDITION_HPP