Pico GPS Teseo
Toggle main menu visibility
Loading...
Searching...
No Matches
callbackmanager-src
callbackmanager.cpp
Go to the documentation of this file.
1
/*
2
* callbackmanager.cpp
3
*
4
* Created on: 16 jun. 2024
5
* Author: jancu
6
*/
7
8
module
;
9
10
#include <concepts>
11
#include <functional>
12
13
export
module
callbackmanager
;
14
15
namespace
callbackmanager
{
16
17
// concept guards what types of return values we can handle
18
template
<
typename
R>
19
concept
Callbackable
=
20
std::is_void<R>::value ||
21
std::is_arithmetic_v<R> ||
22
std::is_class_v<R>;
23
24
export
template
<
Callbackable
R,
typename
... Args>
25
class
Callback
{
26
using
callbackfunction_t = std::function<R(Args...)>;
27
public
:
28
Callback
() : callback_(nullptr), is_callback_set(false){}
29
Callback
(callbackfunction_t callback) :
30
callback_(callback), is_callback_set(true){}
31
32
inline
void
set
(callbackfunction_t callback) {
33
callback_ = callback;
34
is_callback_set =
true
;
35
}
36
37
inline
void
unset
() {
38
callback_ =
nullptr
;
39
is_callback_set =
false
;
40
}
41
42
[[deprecated(
"Use operator () instead."
)]]
43
inline
R
call
(Args... args) {
44
return
*
this
(args...);
45
}
46
47
inline
bool
is_set
() {
48
return
is_callback_set;
49
}
50
51
/*
52
* R can be an arithmetic type, an object, or void
53
*/
54
inline
R
operator()
(Args... args) {
55
if
constexpr
(std::is_void<R>::value) {
// void
56
if
(!is_callback_set) {
57
return
;
58
}
else
{
59
(callback_)(args...);
60
}
61
}
else
if
constexpr
(std::is_class<R>::value) {
// object
62
if
(!is_callback_set) {
63
return
R();
64
}
else
{
65
return
(callback_)(args...);
66
}
67
}
else
{
// not void nor object
68
if
(!is_callback_set) {
69
return
0;
// R can only be a arithmetic type. 0 should work as default.
70
}
else
{
71
return
(callback_)(args...);
72
}
73
}
74
}
75
76
private
:
77
callbackfunction_t callback_;
78
bool
is_callback_set;
79
};
80
81
}
// namespace callbackmanager
callbackmanager::Callback::is_set
bool is_set()
Definition
callbackmanager.cpp:47
callbackmanager::Callback::unset
void unset()
Definition
callbackmanager.cpp:37
callbackmanager::Callback::operator()
R operator()(Args... args)
Definition
callbackmanager.cpp:54
callbackmanager::Callback::Callback
Callback(callbackfunction_t callback)
Definition
callbackmanager.cpp:29
callbackmanager::Callback::set
void set(callbackfunction_t callback)
Definition
callbackmanager.cpp:32
callbackmanager::Callback::call
R call(Args... args)
Definition
callbackmanager.cpp:43
callbackmanager::Callback::Callback
Callback()
Definition
callbackmanager.cpp:28
callbackmanager::Callbackable
Definition
callbackmanager.cpp:19
callbackmanager
callbackmanager
Definition
callbackmanager.cpp:15
Generated by
1.17.0