Yoba Perl
callbacks.hpp
1 #ifndef YOBAPERL_CALLBACKS_HPP
2 #define YOBAPERL_CALLBACKS_HPP
3 
4 #include "yobaperl/common.hpp"
5 
6 #include <unordered_map>
7 #include <functional>
8 
9 namespace yoba {
10 
11 class Perl;
12 class Scalar;
13 
14 }
15 
16 namespace yoba { namespace priv {
17 
18 
19 
20 class YOBAPERL_EXPORT Callbacks
21 {
22 public:
23  enum Context
24  {
25  VoidToVoid,
26  ScalarToVoid,
27  VoidToScalar,
28  ScalarToScalar
29  };
30 
31  using VoidToVoidCB = std::function<void(void)>;
32  using ScalarToVoidCB = std::function<void(Scalar)>;
33  using VoidToScalarCB = std::function<Scalar(void)>;
34  using ScalarToScalarCB = std::function<Scalar(Scalar)>;
35 
36  Callbacks(Perl & perl);
37  Callbacks(const Callbacks & to_copy);
38  Callbacks(Callbacks && to_move);
39 
40  void setVoidToVoid(const std::string & name, VoidToVoidCB function);
41  void setScalarToVoid(const std::string & name, ScalarToVoidCB function);
42  void setVoidToScalar(const std::string & name, VoidToScalarCB function);
43  void setScalarToScalar(const std::string & name, ScalarToScalarCB function);
44  VoidToVoidCB getVoidToVoid(const std::string & name);
45  ScalarToVoidCB getScalarToVoid(const std::string & name);
46  VoidToScalarCB getVoidToScalar(const std::string & name);
47  ScalarToScalarCB getScalarToScalar(const std::string & name);
48 
49 private:
50  Perl & _perl;
51 
52  std::unordered_map<std::string, VoidToVoidCB> _callbacks_void_to_void;
53  std::unordered_map<std::string, ScalarToVoidCB> _callbacks_scalar_to_void;
54  std::unordered_map<std::string, VoidToScalarCB> _callbacks_void_to_scalar;
55  std::unordered_map<std::string, ScalarToScalarCB> _callbacks_scalar_to_scalar;
56 };
57 
58 
59 
60 }} // namespace yoba::priv
61 
62 #endif // YOBAPERL_CALLBACKS_HPP
Definition: array.cpp:5