ComSquare
Callback.hpp
Go to the documentation of this file.
1 //
2 // Created by Zoe Roux on 5/21/21.
3 //
4 
5 
6 #pragma once
7 
8 #include <functional>
9 #include <utility>
10 #include <unordered_map>
11 
12 namespace ComSquare
13 {
15  template<typename ...Types>
16  class Callback
17  {
18  private:
19  int _nextID = 0;
21  std::unordered_map<int, std::function<void (Types...)>> _functions = {};
22 
23  public:
27  template<typename Func>
28  int addCallback(Func callback)
29  {
30  int id = this->_nextID++;
31  if constexpr(std::is_same_v<Func, std::function<void (Types...)>>)
32  this->_functions[id] = std::move(callback);
33  else
34  this->_functions[id] = std::function<void (Types...)>(callback);
35  return id;
36  }
37 
40  void removeCallback(int id)
41  {
42  this->_functions.erase(id);
43  }
44 
45  void operator()(Types ...args) const
46  {
47  for (const auto &[_, callback] : this->_functions)
48  callback(args...);
49  }
50 
52  Callback() = default;
54  Callback(const Callback &) = default;
56  ~Callback() = default;
58  Callback &operator=(const Callback &) = default;
59 
61  template<typename Func>
62  Callback(Func callback) // NOLINT(google-explicit-constructor)
63  {
64  this->addCallback(callback);
65  }
66  };
67 } // namespace WAL
ComSquare::Callback::_functions
std::unordered_map< int, std::function< void(Types...)> > _functions
The list of functions to call.
Definition: Callback.hpp:21
ComSquare::Callback::operator()
void operator()(Types ...args) const
Definition: Callback.hpp:45
ComSquare::Callback::addCallback
int addCallback(Func callback)
Add a method to be called when this callback is invoked.
Definition: Callback.hpp:28
ComSquare::Callback
A callback where you can subscribe to and emit it.
Definition: Callback.hpp:16
ComSquare::Callback::Callback
Callback(Func callback)
Implicitly transform a callable into a callback.
Definition: Callback.hpp:62
ComSquare::Callback::~Callback
~Callback()=default
A default destructor.
ComSquare::Callback::_nextID
int _nextID
Definition: Callback.hpp:19
ComSquare::Callback::removeCallback
void removeCallback(int id)
Remove a function from this callback.
Definition: Callback.hpp:40
ComSquare::Callback::Callback
Callback()=default
A default constructor.
ComSquare::Callback::operator=
Callback & operator=(const Callback &)=default
A default assignment operator.
ComSquare
Definition: APU.cpp:12