22
22
#pragma once
23
23
24
24
#include < atomic>
25
- #include < condition_variable>
26
25
#include < mutex>
27
26
28
27
namespace dev
@@ -38,88 +37,6 @@ struct GenericGuardBool : GuardType
38
37
bool b = true ;
39
38
};
40
39
41
- template <class N >
42
- class Notified
43
- {
44
- public:
45
- Notified () = default ;
46
- Notified (N const & _v) : m_value(_v) {}
47
- Notified (Notified const &) = delete ;
48
- Notified& operator =(N const & _v)
49
- {
50
- UniqueGuard l (m_mutex);
51
- m_value = _v;
52
- m_cv.notify_all ();
53
- return *this ;
54
- }
55
-
56
- operator N () const
57
- {
58
- UniqueGuard l (m_mutex);
59
- return m_value;
60
- }
61
-
62
- void wait () const
63
- {
64
- N old;
65
- {
66
- UniqueGuard l (m_mutex);
67
- old = m_value;
68
- }
69
- waitNot (old);
70
- }
71
- void wait (N const & _v) const
72
- {
73
- UniqueGuard l (m_mutex);
74
- m_cv.wait (l, [&]() { return m_value == _v; });
75
- }
76
- void waitNot (N const & _v) const
77
- {
78
- UniqueGuard l (m_mutex);
79
- m_cv.wait (l, [&]() { return m_value != _v; });
80
- }
81
- template <class F >
82
- void wait (F const & _f) const
83
- {
84
- UniqueGuard l (m_mutex);
85
- m_cv.wait (l, _f);
86
- }
87
-
88
- template <class R , class P >
89
- void wait (std::chrono::duration<R, P> _d) const
90
- {
91
- N old;
92
- {
93
- UniqueGuard l (m_mutex);
94
- old = m_value;
95
- }
96
- waitNot (_d, old);
97
- }
98
- template <class R , class P >
99
- void wait (std::chrono::duration<R, P> _d, N const & _v) const
100
- {
101
- UniqueGuard l (m_mutex);
102
- m_cv.wait_for (l, _d, [&]() { return m_value == _v; });
103
- }
104
- template <class R , class P >
105
- void waitNot (std::chrono::duration<R, P> _d, N const & _v) const
106
- {
107
- UniqueGuard l (m_mutex);
108
- m_cv.wait_for (l, _d, [&]() { return m_value != _v; });
109
- }
110
- template <class R , class P , class F >
111
- void wait (std::chrono::duration<R, P> _d, F const & _f) const
112
- {
113
- UniqueGuard l (m_mutex);
114
- m_cv.wait_for (l, _d, _f);
115
- }
116
-
117
- private:
118
- mutable Mutex m_mutex;
119
- mutable std::condition_variable m_cv;
120
- N m_value;
121
- };
122
-
123
40
/* * @brief Simple block guard.
124
41
* The expression/block following is guarded though the given mutex.
125
42
* Usage:
0 commit comments