diff options
-rw-r--r-- | documentation/classes-and-objects.html | 8 | ||||
-rw-r--r-- | include/class.h | 24 | ||||
-rw-r--r-- | include/classbase.h | 8 | ||||
-rw-r--r-- | src/classbase.cpp | 52 | ||||
-rw-r--r-- | src/method.h | 22 |
5 files changed, 97 insertions, 17 deletions
diff --git a/documentation/classes-and-objects.html b/documentation/classes-and-objects.html index c45ca09..0fed826 100644 --- a/documentation/classes-and-objects.html +++ b/documentation/classes-and-objects.html @@ -23,8 +23,8 @@ private: int _value = 0; public: - MyClass() {} - virtual ~MyClass() {} + Counter() {} + virtual ~Counter() {} Php::Value increment() { return ++_value; } Php::Value decrement() { return --_value; } @@ -116,8 +116,8 @@ private: int _value = 0; public: - MyClass() {} - virtual ~MyClass() {} + Counter() {} + virtual ~Counter() {} Php::Value increment(Php::Parameters ¶ms) { diff --git a/include/class.h b/include/class.h index 7d82441..a22b9a8 100644 --- a/include/class.h +++ b/include/class.h @@ -73,14 +73,22 @@ public: * @param flags Optional flags * @param args Argument descriptions */ - void method(const char *name, void (T::*method)(), int flags, const Arguments &args = {}) { ClassBase::method(name, static_cast<method_callback_0>(method), flags, args); } - void method(const char *name, void (T::*method)(Parameters ¶ms), int flags, const Arguments &args = {}) { ClassBase::method(name, static_cast<method_callback_1>(method), flags, args); } - void method(const char *name, Value (T::*method)(), int flags, const Arguments &args = {}) { ClassBase::method(name, static_cast<method_callback_2>(method), flags, args); } - void method(const char *name, Value (T::*method)(Parameters ¶ms), int flags, const Arguments &args = {}) { ClassBase::method(name, static_cast<method_callback_3>(method), flags, args); } - void method(const char *name, void (T::*method)(), const Arguments &args = {}) { ClassBase::method(name, static_cast<method_callback_0>(method), Public, args); } - void method(const char *name, void (T::*method)(Parameters ¶ms), const Arguments &args = {}) { ClassBase::method(name, static_cast<method_callback_1>(method), Public, args); } - void method(const char *name, Value (T::*method)(), const Arguments &args = {}) { ClassBase::method(name, static_cast<method_callback_2>(method), Public, args); } - void method(const char *name, Value (T::*method)(Parameters ¶ms), const Arguments &args = {}) { ClassBase::method(name, static_cast<method_callback_3>(method), Public, args); } + void method(const char *name, void (T::*method)(), int flags, const Arguments &args = {}) { ClassBase::method(name, static_cast<method_callback_0>(method), flags, args); } + void method(const char *name, void (T::*method)(Parameters ¶ms), int flags, const Arguments &args = {}) { ClassBase::method(name, static_cast<method_callback_1>(method), flags, args); } + void method(const char *name, Value (T::*method)(), int flags, const Arguments &args = {}) { ClassBase::method(name, static_cast<method_callback_2>(method), flags, args); } + void method(const char *name, Value (T::*method)(Parameters ¶ms), int flags, const Arguments &args = {}) { ClassBase::method(name, static_cast<method_callback_3>(method), flags, args); } + void method(const char *name, void (T::*method)(), const Arguments &args = {}) { ClassBase::method(name, static_cast<method_callback_0>(method), Public, args); } + void method(const char *name, void (T::*method)(Parameters ¶ms), const Arguments &args = {}) { ClassBase::method(name, static_cast<method_callback_1>(method), Public, args); } + void method(const char *name, Value (T::*method)(), const Arguments &args = {}) { ClassBase::method(name, static_cast<method_callback_2>(method), Public, args); } + void method(const char *name, Value (T::*method)(Parameters ¶ms), const Arguments &args = {}) { ClassBase::method(name, static_cast<method_callback_3>(method), Public, args); } + void method(const char *name, void (T::*method)() const, int flags, const Arguments &args = {}) { ClassBase::method(name, static_cast<method_callback_4>(method), flags, args); } + void method(const char *name, void (T::*method)(Parameters ¶ms) const, int flags, const Arguments &args = {}) { ClassBase::method(name, static_cast<method_callback_5>(method), flags, args); } + void method(const char *name, Value (T::*method)() const, int flags, const Arguments &args = {}) { ClassBase::method(name, static_cast<method_callback_6>(method), flags, args); } + void method(const char *name, Value (T::*method)(Parameters ¶ms) const, int flags, const Arguments &args = {}) { ClassBase::method(name, static_cast<method_callback_7>(method), flags, args); } + void method(const char *name, void (T::*method)() const, const Arguments &args = {}) { ClassBase::method(name, static_cast<method_callback_4>(method), Public, args); } + void method(const char *name, void (T::*method)(Parameters ¶ms) const, const Arguments &args = {}) { ClassBase::method(name, static_cast<method_callback_5>(method), Public, args); } + void method(const char *name, Value (T::*method)() const, const Arguments &args = {}) { ClassBase::method(name, static_cast<method_callback_6>(method), Public, args); } + void method(const char *name, Value (T::*method)(Parameters ¶ms) const, const Arguments &args = {}) { ClassBase::method(name, static_cast<method_callback_7>(method), Public, args); } /** * Add an abstract method to the class diff --git a/include/classbase.h b/include/classbase.h index 9dd4628..3792fdb 100644 --- a/include/classbase.h +++ b/include/classbase.h @@ -32,6 +32,10 @@ typedef void (Base::*method_callback_0)(); typedef void (Base::*method_callback_1)(Parameters &); typedef Value (Base::*method_callback_2)(); typedef Value (Base::*method_callback_3)(Parameters &); +typedef void (Base::*method_callback_4)() const; +typedef void (Base::*method_callback_5)(Parameters &) const; +typedef Value (Base::*method_callback_6)() const; +typedef Value (Base::*method_callback_7)(Parameters &) const; /** * Forward declarations @@ -133,6 +137,10 @@ protected: void method(const char *name, method_callback_1, int flags=0, const Arguments &args = {}); void method(const char *name, method_callback_2, int flags=0, const Arguments &args = {}); void method(const char *name, method_callback_3, int flags=0, const Arguments &args = {}); + void method(const char *name, method_callback_4, int flags=0, const Arguments &args = {}); + void method(const char *name, method_callback_5, int flags=0, const Arguments &args = {}); + void method(const char *name, method_callback_6, int flags=0, const Arguments &args = {}); + void method(const char *name, method_callback_7, int flags=0, const Arguments &args = {}); /** * Add an abstract method to the class diff --git a/src/classbase.cpp b/src/classbase.cpp index e813617..19ac6bc 100644 --- a/src/classbase.cpp +++ b/src/classbase.cpp @@ -307,6 +307,58 @@ void ClassBase::method(const char *name, method_callback_3 callback, int flags, } /** + * Add a method to the class + * @param name Name of the method + * @param method The actual method + * @param flags Optional flags + * @param args Description of the supported arguments + */ +void ClassBase::method(const char *name, method_callback_4 callback, int flags, const Arguments &args) +{ + // add the method + _methods.push_back(std::make_shared<Method>(name, callback, flags, args)); +} + +/** + * Add a method to the class + * @param name Name of the method + * @param method The actual method + * @param flags Optional flags + * @param args Description of the supported arguments + */ +void ClassBase::method(const char *name, method_callback_5 callback, int flags, const Arguments &args) +{ + // add the method + _methods.push_back(std::make_shared<Method>(name, callback, flags, args)); +} + +/** + * Add a method to the class + * @param name Name of the method + * @param method The actual method + * @param flags Optional flags + * @param args Description of the supported arguments + */ +void ClassBase::method(const char *name, method_callback_6 callback, int flags, const Arguments &args) +{ + // add the method + _methods.push_back(std::make_shared<Method>(name, callback, flags, args)); +} + +/** + * Add a method to the class + * @param name Name of the method + * @param method The actual method + * @param flags Optional flags + * @param args Description of the supported arguments + */ +void ClassBase::method(const char *name, method_callback_7 callback, int flags, const Arguments &args) +{ + // add the method + _methods.push_back(std::make_shared<Method>(name, callback, flags, args)); +} + +/** * Add an abstract method to the class * @param name Name of the method * @param flags Optional flags (like public or protected) diff --git a/src/method.h b/src/method.h index f583fc8..f305d42 100644 --- a/src/method.h +++ b/src/method.h @@ -27,11 +27,15 @@ public: * @param flags Access flags * @param args Argument description */ - Method(const char *name, method_callback_0 callback, int flags, const Arguments &args) : Callable(name, args), _type(0), _flags(flags) { _callback.m0 = callback; } - Method(const char *name, method_callback_1 callback, int flags, const Arguments &args) : Callable(name, args), _type(1), _flags(flags) { _callback.m1 = callback; } - Method(const char *name, method_callback_2 callback, int flags, const Arguments &args) : Callable(name, args), _type(2), _flags(flags) { _callback.m2 = callback; } - Method(const char *name, method_callback_3 callback, int flags, const Arguments &args) : Callable(name, args), _type(3), _flags(flags) { _callback.m3 = callback; } - Method(const char *name, int flags, const Arguments &args) : Callable(name, args), _type(4), _flags(flags) { _callback.m0 = nullptr; } + Method(const char *name, method_callback_0 callback, int flags, const Arguments &args) : Callable(name, args), _type(0), _flags(flags) { _callback.m0 = callback; } + Method(const char *name, method_callback_1 callback, int flags, const Arguments &args) : Callable(name, args), _type(1), _flags(flags) { _callback.m1 = callback; } + Method(const char *name, method_callback_2 callback, int flags, const Arguments &args) : Callable(name, args), _type(2), _flags(flags) { _callback.m2 = callback; } + Method(const char *name, method_callback_3 callback, int flags, const Arguments &args) : Callable(name, args), _type(3), _flags(flags) { _callback.m3 = callback; } + Method(const char *name, method_callback_4 callback, int flags, const Arguments &args) : Callable(name, args), _type(4), _flags(flags) { _callback.m4 = callback; } + Method(const char *name, method_callback_5 callback, int flags, const Arguments &args) : Callable(name, args), _type(5), _flags(flags) { _callback.m5 = callback; } + Method(const char *name, method_callback_6 callback, int flags, const Arguments &args) : Callable(name, args), _type(6), _flags(flags) { _callback.m6 = callback; } + Method(const char *name, method_callback_7 callback, int flags, const Arguments &args) : Callable(name, args), _type(7), _flags(flags) { _callback.m7 = callback; } + Method(const char *name, int flags, const Arguments &args) : Callable(name, args), _type(9999), _flags(flags) { _callback.m0 = nullptr; } /** * Copy and move constructors @@ -78,6 +82,10 @@ public: case 1: (base->*_callback.m1)(parameters); return Value(); case 2: return (base->*_callback.m2)(); case 3: return (base->*_callback.m3)(parameters); + case 4: (base->*_callback.m4)(); return Value(); + case 5: (base->*_callback.m5)(parameters); return Value(); + case 6: return (base->*_callback.m6)(); + case 7: return (base->*_callback.m7)(parameters); default: return Value(); } } @@ -105,6 +113,10 @@ private: method_callback_1 m1; method_callback_2 m2; method_callback_3 m3; + method_callback_4 m4; + method_callback_5 m5; + method_callback_6 m6; + method_callback_7 m7; } _callback; }; |