summaryrefslogtreecommitdiff
path: root/include/class.h
diff options
context:
space:
mode:
authorMartijn Otto <martijn.otto@copernica.com>2014-02-14 16:30:23 +0100
committerMartijn Otto <martijn.otto@copernica.com>2014-02-14 16:30:23 +0100
commit06aa5fd5afaba69544b93654fb0a4f9c2651306e (patch)
tree99cd2ee120786a84531b450f9ef64e2319ef5192 /include/class.h
parent5c23fee5ce58ae66a70f3bd19a1dc2dff7220f13 (diff)
Merged pull request #14
Diffstat (limited to 'include/class.h')
-rw-r--r--include/class.h44
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
*/