3 #ifndef DOXYGEN_SKIP_PROPERTY
9 template<
class _Ety,
class... _Types>
19 typedef std::function<bool(_Ety * e, _Types...)> callee_type;
21 typedef spinlock lock_type;
26 std::atomic<intptr_t> _counter;
28 _awaker(callee_type && callee_, intptr_t init_count_ = 0)
29 : _callee(std::forward<callee_type>(callee_))
30 , _counter(init_count_)
37 bool awake(_Ety * e, intptr_t count_,
const _Types&... args)
40 scoped_lock<lock_type> lock_(this->_lock);
42 if ((this->_counter.fetch_sub(count_) - count_) <= 0)
46 callee_type callee_ = std::move(this->_callee);
47 return callee_(e, args...);
55 _awaker(
const _awaker &) =
delete;
56 _awaker(_awaker &&) =
delete;
57 _awaker & operator = (
const _awaker &) =
delete;
58 _awaker & operator = (_awaker &&) =
delete;
63 #endif //DOXYGEN_SKIP_PROPERTY