diff options
author | Martijn Otto <martijn.otto@copernica.com> | 2014-02-14 16:30:23 +0100 |
---|---|---|
committer | Martijn Otto <martijn.otto@copernica.com> | 2014-02-14 16:30:23 +0100 |
commit | 06aa5fd5afaba69544b93654fb0a4f9c2651306e (patch) | |
tree | 99cd2ee120786a84531b450f9ef64e2319ef5192 /include/class.h | |
parent | 5c23fee5ce58ae66a70f3bd19a1dc2dff7220f13 (diff) |
Merged pull request #14
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 */ |