summaryrefslogtreecommitdiff
path: root/src/function.h
diff options
context:
space:
mode:
authorEmiel Bruijntjes <emiel.bruijntjes@copernica.com>2014-02-28 10:25:01 +0100
committerEmiel Bruijntjes <emiel.bruijntjes@copernica.com>2014-02-28 10:25:01 +0100
commit71055ebdea1e8eec30747a04f36e0c10e750bff5 (patch)
tree18ed63d5fe64a936c284a38d4f72921a4ddc97df /src/function.h
parent85349bbb642a83012a7d0dbccde8b7c1eea1b914 (diff)
a lot of refactoring, to make it much easier to define classes in an extension
Diffstat (limited to 'src/function.h')
-rw-r--r--src/function.h76
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 &params) 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
+ */
+}
+