File indexing completed on 2025-07-15 08:36:50
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/timed_utils.hpp>
0029 #include <boost/interprocess/sync/interprocess_mutex.hpp>
0030 #include <boost/interprocess/sync/interprocess_condition.hpp>
0031 #include <boost/interprocess/exceptions.hpp>
0032 #include <boost/interprocess/sync/detail/condition_any_algorithm.hpp>
0033
0034 #endif
0035
0036
0037
0038
0039 namespace boost {
0040 namespace interprocess {
0041
0042
0043
0044
0045
0046
0047
0048
0049
0050
0051
0052
0053 class interprocess_condition_any
0054 {
0055 #if !defined(BOOST_INTERPROCESS_DOXYGEN_INVOKED)
0056
0057 interprocess_condition_any(const interprocess_condition_any &);
0058 interprocess_condition_any &operator=(const interprocess_condition_any &);
0059
0060 class members
0061 {
0062 public:
0063 typedef interprocess_condition condvar_type;
0064 typedef interprocess_mutex mutex_type;
0065
0066 condvar_type &get_condvar() { return m_cond; }
0067 mutex_type &get_mutex() { return m_mut; }
0068
0069 private:
0070 condvar_type m_cond;
0071 mutex_type m_mut;
0072 };
0073
0074 ipcdetail::condition_any_wrapper<members> m_cond;
0075
0076 #endif
0077 public:
0078
0079 interprocess_condition_any(){}
0080
0081
0082
0083 ~interprocess_condition_any(){}
0084
0085
0086
0087 void notify_one()
0088 { m_cond.notify_one(); }
0089
0090
0091
0092 void notify_all()
0093 { m_cond.notify_all(); }
0094
0095
0096
0097
0098 template <typename L>
0099 void wait(L& lock)
0100 { m_cond.wait(lock); }
0101
0102
0103
0104 template <typename L, typename Pr>
0105 void wait(L& lock, Pr pred)
0106 { m_cond.wait(lock, pred); }
0107
0108
0109
0110
0111
0112
0113 template <typename L, class TimePoint>
0114 bool timed_wait(L& lock, const TimePoint &abs_time)
0115 { return m_cond.timed_wait(lock, abs_time); }
0116
0117
0118
0119
0120 template <typename L, class TimePoint, typename Pr>
0121 bool timed_wait(L& lock, const TimePoint &abs_time, Pr pred)
0122 { return m_cond.timed_wait(lock, abs_time, pred); }
0123
0124
0125
0126 template <typename L, class TimePoint>
0127 cv_status wait_until(L& lock, const TimePoint &abs_time)
0128 { return this->timed_wait(lock, abs_time) ? cv_status::no_timeout : cv_status::timeout; }
0129
0130
0131
0132 template <typename L, class TimePoint, typename Pr>
0133 bool wait_until(L& lock, const TimePoint &abs_time, Pr pred)
0134 { return this->timed_wait(lock, abs_time, pred); }
0135
0136
0137
0138 template <typename L, class Duration>
0139 cv_status wait_for(L& lock, const Duration &dur)
0140 { return this->wait_until(lock, ipcdetail::duration_to_ustime(dur)); }
0141
0142
0143
0144 template <typename L, class Duration, typename Pr>
0145 bool wait_for(L& lock, const Duration &dur, Pr pred)
0146 { return this->wait_until(lock, ipcdetail::duration_to_ustime(dur), pred); }
0147 };
0148
0149 }
0150 }
0151
0152 #include <boost/interprocess/detail/config_end.hpp>
0153
0154 #endif