diff options
Diffstat (limited to 'include/class.h')
-rw-r--r-- | include/class.h | 44 |
1 files changed, 41 insertions, 3 deletions
diff --git a/include/class.h b/include/class.h index 3746cf3..201f4de 100644 --- a/include/class.h +++ b/include/class.h @@ -11,6 +11,7 @@ * Note that YourClass must extend from Php::Object * * @author Emiel Bruijntjes <emiel.bruijntjes@copernica.com> + * changed by Valeriy Dmitriev <ufabiz@gmail.com> * @copyright 2013 Copernica BV */ @@ -40,18 +41,18 @@ public: * Constructor with initializer list to define the properties * @param members */ - Class(const std::initializer_list<Member> &members) : _members(members) {} + Class(const std::initializer_list<Member> &members, FlagClass flags = FlagClass(Zend::AccClass::NOSET)) : _members(members), _flags(flags) {} /** * Move constructor * @param that */ - Class(Class &&that) : _members(std::move(that._members)) {} + Class(Class &&that) : _members(std::move(that._members)), _flags(std::move(that._flags)) {} /** * Copy constructor */ - Class(const Class &that) : _members(that._members) {} + Class(const Class &that) : _members(that._members), _flags(that._flags) {} /** * Destructor @@ -91,6 +92,14 @@ public: { return _members.methods(classname); } + + /** + * Retrieve the int access types flags for PHP class + * @return int flags of access types for classes + */ + int getFlags() { + return _flags; + } protected: /** @@ -99,8 +108,37 @@ protected: */ Members _members; +private: + /** + * The access types flags for class + */ + FlagClass _flags; + }; + +/** + * Class definition of the ClassFlagged + * template ClassFlagged designed for easy instance of Class<T> for concrete flags + */ +template <typename T, Zend::AccClass Flags> +class ClassFlagged : public Class<T> +{ +public: + ClassFlagged() : Class<T>() {} + ClassFlagged(const std::initializer_list<Member> &members) : Class<T>(members, FlagClass(Flags)) {} +}; + +template <typename T> +// C++11 analog of `typedef`. Equivalent to the following pseudocode: typedef ClassFlagged<T, Zend::AccClass::FINAL> FinalClass<T>; +using FinalClass = ClassFlagged<T, Zend::AccClass::FINAL>; +template <typename T> +using AbstractClass = ClassFlagged<T, Zend::AccClass::ABSTRACT>; +template <typename T> +using Interface = ClassFlagged<T, Zend::AccClass::INTERFACE>; +template <typename T> +using Trait = ClassFlagged<T, Zend::AccClass::TRAIT>; + /** * End of namespace */ |