File indexing completed on 2025-01-18 09:38:33
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011 #ifndef BOOST_INTERPROCESS_CONDITION_ANY_HPP
0012 #define BOOST_INTERPROCESS_CONDITION_ANY_HPP
0013
0014 #ifndef BOOST_CONFIG_HPP
0015 # include <boost/config.hpp>
0016 #endif
0017 #
0018 #if defined(BOOST_HAS_PRAGMA_ONCE)
0019 # pragma once
0020 #endif
0021
0022 #if !defined(BOOST_INTERPROCESS_DOXYGEN_INVOKED)
0023
0024 #include <boost/interprocess/detail/config_begin.hpp>
0025 #include <boost/interprocess/detail/workaround.hpp>
0026
0027 #include <boost/interprocess/sync/cv_status.hpp>
0028 #include <boost/interprocess/sync/interprocess_mutex.hpp>
0029 #include <boost/interprocess/sync/interprocess_condition.hpp>
0030 #include <boost/interprocess/exceptions.hpp>
0031 #include <boost/interprocess/sync/detail/condition_any_algorithm.hpp>
0032
0033 #endif
0034
0035
0036
0037
0038 namespace boost {
0039 namespace interprocess {
0040
0041
0042
0043
0044
0045
0046
0047
0048
0049
0050
0051
0052 class interprocess_condition_any
0053 {
0054 #if !defined(BOOST_INTERPROCESS_DOXYGEN_INVOKED)
0055
0056 interprocess_condition_any(const interprocess_condition_any &);
0057 interprocess_condition_any &operator=(const interprocess_condition_any &);
0058
0059 class members
0060 {
0061 public:
0062 typedef interprocess_condition condvar_type;
0063 typedef interprocess_mutex mutex_type;
0064
0065 condvar_type &get_condvar() { return m_cond; }
0066 mutex_type &get_mutex() { return m_mut; }
0067
0068 private:
0069 condvar_type m_cond;
0070 mutex_type m_mut;
0071 };
0072
0073 ipcdetail::condition_any_wrapper<members> m_cond;
0074
0075 #endif
0076 public:
0077
0078 interprocess_condition_any(){}
0079
0080
0081
0082 ~interprocess_condition_any(){}
0083
0084
0085
0086 void notify_one()
0087 { m_cond.notify_one(); }
0088
0089
0090
0091 void notify_all()
0092 { m_cond.notify_all(); }
0093
0094
0095
0096
0097 template <typename L>
0098 void wait(L& lock)
0099 { m_cond.wait(lock); }
0100
0101
0102
0103 template <typename L, typename Pr>
0104 void wait(L& lock, Pr pred)
0105 { m_cond.wait(lock, pred); }
0106
0107
0108
0109
0110
0111
0112 template <typename L, class TimePoint>
0113 bool timed_wait(L& lock, const TimePoint &abs_time)
0114 { return m_cond.timed_wait(lock, abs_time); }
0115
0116
0117
0118
0119 template <typename L, class TimePoint, typename Pr>
0120 bool timed_wait(L& lock, const TimePoint &abs_time, Pr pred)
0121 { return m_cond.timed_wait(lock, abs_time, pred); }
0122
0123
0124
0125 template <typename L, class TimePoint>
0126 cv_status wait_until(L& lock, const TimePoint &abs_time)
0127 { return this->timed_wait(lock, abs_time) ? cv_status::no_timeout : cv_status::timeout; }
0128
0129
0130
0131 template <typename L, class TimePoint, typename Pr>
0132 bool wait_until(L& lock, const TimePoint &abs_time, Pr pred)
0133 { return this->timed_wait(lock, abs_time, pred); }
0134
0135
0136
0137 template <typename L, class Duration>
0138 cv_status wait_for(L& lock, const Duration &dur)
0139 { return this->wait_until(lock, ipcdetail::duration_to_ustime(dur)); }
0140
0141
0142
0143 template <typename L, class Duration, typename Pr>
0144 bool wait_for(L& lock, const Duration &dur, Pr pred)
0145 { return this->wait_until(lock, ipcdetail::duration_to_ustime(dur), pred); }
0146 };
0147
0148 }
0149 }
0150
0151 #include <boost/interprocess/detail/config_end.hpp>
0152
0153 #endif