1 #include "yobaperl/callbacks.hpp" 2 #include "yobaperl/perl.hpp" 3 #include "yobaperl/perl_exception.hpp" 5 namespace yoba {
namespace priv {
9 Callbacks::Callbacks(Perl & perl)
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)
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))
32 void Callbacks::setVoidToVoid(
const std::string & name, Callbacks::VoidToVoidCB
function)
34 _callbacks_void_to_void.insert({ name,
function });
37 void Callbacks::setScalarToVoid(
const std::string & name, Callbacks::ScalarToVoidCB
function)
39 _callbacks_scalar_to_void.insert({ name,
function });
42 void Callbacks::setVoidToScalar(
const std::string & name, Callbacks::VoidToScalarCB
function)
44 _callbacks_void_to_scalar.insert({ name,
function });
47 void Callbacks::setScalarToScalar(
const std::string & name, Callbacks::ScalarToScalarCB
function)
49 _callbacks_scalar_to_scalar.insert({ name,
function });
52 Callbacks::VoidToVoidCB Callbacks::getVoidToVoid(
const std::string & name)
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)");
61 Callbacks::ScalarToVoidCB Callbacks::getScalarToVoid(
const std::string & name)
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)");
70 Callbacks::VoidToScalarCB Callbacks::getVoidToScalar(
const std::string & name)
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)");
79 Callbacks::ScalarToScalarCB Callbacks::getScalarToScalar(
const std::string & name)
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)");
int getId() const
Perl object id.