Yoba Perl
callbacks.cpp
1 #include "yobaperl/callbacks.hpp"
2 #include "yobaperl/perl.hpp"
3 #include "yobaperl/perl_exception.hpp"
4 
5 namespace yoba { namespace priv {
6 
7 
8 
9 Callbacks::Callbacks(Perl & perl)
10  : _perl(perl)
11 {
12 }
13 
14 Callbacks::Callbacks(const Callbacks & to_copy)
15  : _perl(to_copy._perl),
16  _callbacks_void_to_void(to_copy._callbacks_void_to_void),
17  _callbacks_scalar_to_void(to_copy._callbacks_scalar_to_void),
18  _callbacks_void_to_scalar(to_copy._callbacks_void_to_scalar),
19  _callbacks_scalar_to_scalar(to_copy._callbacks_scalar_to_scalar)
20 {
21 }
22 
23 Callbacks::Callbacks(Callbacks && to_move)
24  : _perl(to_move._perl),
25  _callbacks_void_to_void(std::move(to_move._callbacks_void_to_void)),
26  _callbacks_scalar_to_void(std::move(to_move._callbacks_scalar_to_void)),
27  _callbacks_void_to_scalar(std::move(to_move._callbacks_void_to_scalar)),
28  _callbacks_scalar_to_scalar(std::move(to_move._callbacks_scalar_to_scalar))
29 {
30 }
31 
32 void Callbacks::setVoidToVoid(const std::string & name, Callbacks::VoidToVoidCB function)
33 {
34  _callbacks_void_to_void.insert({ name, function });
35 }
36 
37 void Callbacks::setScalarToVoid(const std::string & name, Callbacks::ScalarToVoidCB function)
38 {
39  _callbacks_scalar_to_void.insert({ name, function });
40 }
41 
42 void Callbacks::setVoidToScalar(const std::string & name, Callbacks::VoidToScalarCB function)
43 {
44  _callbacks_void_to_scalar.insert({ name, function });
45 }
46 
47 void Callbacks::setScalarToScalar(const std::string & name, Callbacks::ScalarToScalarCB function)
48 {
49  _callbacks_scalar_to_scalar.insert({ name, function });
50 }
51 
52 Callbacks::VoidToVoidCB Callbacks::getVoidToVoid(const std::string & name)
53 {
54  auto it = _callbacks_void_to_void.find(name);
55  if(it == _callbacks_void_to_void.end())
56  throw PerlException(_perl.getId(), "Callback not registered or wrong context (void -> void)");
57 
58  return it->second;
59 }
60 
61 Callbacks::ScalarToVoidCB Callbacks::getScalarToVoid(const std::string & name)
62 {
63  auto it = _callbacks_scalar_to_void.find(name);
64  if(it == _callbacks_scalar_to_void.end())
65  throw PerlException(_perl.getId(), "Callback not registered or wrong context (Scalar -> void)");
66 
67  return it->second;
68 }
69 
70 Callbacks::VoidToScalarCB Callbacks::getVoidToScalar(const std::string & name)
71 {
72  auto it = _callbacks_void_to_scalar.find(name);
73  if(it == _callbacks_void_to_scalar.end())
74  throw PerlException(_perl.getId(), "Callback not registered or wrong context (void -> Scalar)");
75 
76  return it->second;
77 }
78 
79 Callbacks::ScalarToScalarCB Callbacks::getScalarToScalar(const std::string & name)
80 {
81  auto it = _callbacks_scalar_to_scalar.find(name);
82  if(it == _callbacks_scalar_to_scalar.end())
83  throw PerlException(_perl.getId(), "Callback not registered or wrong context (Scalar -> Scalar)");
84 
85  return it->second;
86 }
87 
88 
89 
90 }} // namespace yoba::priv
Definition: array.cpp:5
STL namespace.
int getId() const
Perl object id.
Definition: perl.cpp:298