diff options
Diffstat (limited to 'src/function.h')
-rw-r--r-- | src/function.h | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/src/function.h b/src/function.h new file mode 100644 index 0000000..84d7dcc --- /dev/null +++ b/src/function.h @@ -0,0 +1,76 @@ +/** + * Function.h + * + * The Function class is an extension of the Callable class that + * forwards the function call directly to a native function in C/C++ + * + * @author Emiel Bruijntjes <emiel.bruijntjes@copernica.com> + * @copyright 2013 Copernica BV + */ + +/** + * Set up namespace + */ +namespace Php { + +/** + * Class definition + */ +class Function : public Callable +{ +public: + /** + * Constructor + * @param name Function name + * @param function The native C function + */ + Function(const char *name, native_callback_0 function, const Arguments &arguments = {}) : Callable(name, arguments), _type(0) { _function.f0 = function; } + Function(const char *name, native_callback_1 function, const Arguments &arguments = {}) : Callable(name, arguments), _type(1) { _function.f1 = function; } + Function(const char *name, native_callback_2 function, const Arguments &arguments = {}) : Callable(name, arguments), _type(2) { _function.f2 = function; } + Function(const char *name, native_callback_3 function, const Arguments &arguments = {}) : Callable(name, arguments), _type(3) { _function.f3 = function; } + + /** + * Destructor + */ + virtual ~Function() {} + + /** + * Method that gets called every time the function is executed + * @param params The parameters that were passed + * @return Variable Return value + */ + virtual Value invoke(Parameters ¶ms) override + { + switch (_type) { + case 0: _function.f0(); return Value(); + case 1: _function.f1(params); return Value(); + case 2: return _function.f2(); + case 3: return _function.f3(params); + default: return Value(); + } + } + +private: + /** + * Union of supported callbacks + * One of the callbacks will be set + */ + union { + native_callback_0 f0; + native_callback_1 f1; + native_callback_2 f2; + native_callback_3 f3; + } _function; + + /** + * The callback that is set + * @var integer + */ + int _type; +}; + +/** + * End of namespace + */ +} + |