Iros
 
Loading...
Searching...
No Matches
in_place_stop_callback.h
Go to the documentation of this file.
1#pragma once
2
4
5namespace di::sync {
6template<typename Callback>
8public:
9 using CallbackType = Callback;
10
11 template<typename C>
13 explicit InPlaceStopCallback(InPlaceStopToken token, C&& callback)
14 : detail::InPlaceStopCallbackBase(token.m_source,
15 [](void* self) {
16 function::invoke(
17 util::move(static_cast<InPlaceStopCallback*>(self)->m_callback));
18 })
19 , m_callback(util::forward<C>(callback)) {
20 if (m_parent) {
21 if (!m_parent->try_add_callback(this)) {
22 function::invoke(util::move(m_callback));
23 }
24 }
25 }
26
28
31 m_parent->remove_callback(this);
32 }
33 }
34
35private:
36 Callback m_callback;
37};
38
39template<typename Callback>
41}
Definition in_place_stop_callback.h:7
~InPlaceStopCallback()
Definition in_place_stop_callback.h:29
Callback CallbackType
Definition in_place_stop_callback.h:9
InPlaceStopCallback(InPlaceStopCallback &&)=delete
InPlaceStopCallback(InPlaceStopToken token, C &&callback)
Definition in_place_stop_callback.h:13
Definition in_place_stop_token.h:6
Definition in_place_stop_callback_base.h:8
InPlaceStopSource const * m_parent
Definition in_place_stop_callback_base.h:18
Atomic< bool > m_already_executed
Definition in_place_stop_callback_base.h:20
Definition operations.h:11
constexpr auto invoke
Definition invoke.h:100
Definition atomic.h:12
InPlaceStopCallback(InPlaceStopToken, Callback) -> InPlaceStopCallback< Callback >
@ Acquire
Definition memory_order.h:9