diff options
Diffstat (limited to 'src/member.cpp')
-rw-r--r-- | src/member.cpp | 57 |
1 files changed, 32 insertions, 25 deletions
diff --git a/src/member.cpp b/src/member.cpp index d4f5d2d..70dec9f 100644 --- a/src/member.cpp +++ b/src/member.cpp @@ -16,9 +16,9 @@ namespace Php { /** * Constructor * @param name Name of the member - * @param pub Is this a public property (otherwise it is protected) + * @param flags Flag access to a class member (bublic, protected etc) */ -Member::Member(const char *name, bool pub) : _name(name), _public(pub) +Member::Member(const char *name, const FlagMemb &&flags) : _name(name), _accflag(flags) { // create a null member _info = new NullMember(); @@ -27,10 +27,10 @@ Member::Member(const char *name, bool pub) : _name(name), _public(pub) /** * Constructor * @param name Name of the member - * @param pub Is this a public property (otherwise it is protected) + * @param flags Flag access to a class member (bublic, protected etc) * @param value The value to add */ -Member::Member(const char *name, bool pub, std::nullptr_t value) : _name(name), _public(pub) +Member::Member(const char *name, const FlagMemb &&flags, std::nullptr_t value) : _name(name), _accflag(flags) { // create a null member _info = new NullMember(); @@ -39,10 +39,10 @@ Member::Member(const char *name, bool pub, std::nullptr_t value) : _name(name), /** * Constructor * @param name Name of the member - * @param pub Is this a public property (otherwise it is protected) + * @param flags Flag access to a class member (bublic, protected etc) * @param value The value to add */ -Member::Member(const char *name, bool pub, int value) : _name(name), _public(pub) +Member::Member(const char *name, const FlagMemb &&flags, int value) : _name(name), _accflag(flags) { // create a long member _info = new LongMember(value); @@ -51,10 +51,10 @@ Member::Member(const char *name, bool pub, int value) : _name(name), _public(pub /** * Constructor * @param name Name of the member - * @param pub Is this a public property (otherwise it is protected) + * @param flags Flag access to a class member (bublic, protected etc) * @param value The value to add */ -Member::Member(const char *name, bool pub, long value) : _name(name), _public(pub) +Member::Member(const char *name, const FlagMemb &&flags, long value) : _name(name), _accflag(flags) { // create a long member _info = new LongMember(value); @@ -63,10 +63,10 @@ Member::Member(const char *name, bool pub, long value) : _name(name), _public(pu /** * Constructor * @param name Name of the member - * @param pub Is this a public property (otherwise it is protected) + * @param flags Flag access to a class member (bublic, protected etc) * @param value The value to add */ -Member::Member(const char *name, bool pub, bool value) : _name(name), _public(pub) +Member::Member(const char *name, const FlagMemb &&flags, bool value) : _name(name), _accflag(flags) { // create a bool member _info = new BoolMember(value); @@ -75,10 +75,10 @@ Member::Member(const char *name, bool pub, bool value) : _name(name), _public(pu /** * Constructor * @param name Name of the member - * @param pub Is this a public property (otherwise it is protected) + * @param flags Flag access to a class member (bublic, protected etc) * @param value The value to add */ -Member::Member(const char *name, bool pub, char value) : _name(name), _public(pub) +Member::Member(const char *name, const FlagMemb &&flags, char value) : _name(name), _accflag(flags) { // create a new string member _info = new StringMember(&value, 1); @@ -87,10 +87,10 @@ Member::Member(const char *name, bool pub, char value) : _name(name), _public(pu /** * Constructor * @param name Name of the member - * @param pub Is this a public property (otherwise it is protected) + * @param flags Flag access to a class member (bublic, protected etc) * @param value The value to add */ -Member::Member(const char *name, bool pub, const std::string &value) : _name(name), _public(pub) +Member::Member(const char *name, const FlagMemb &&flags, const std::string &value) : _name(name), _accflag(flags) { // create a new string member _info = new StringMember(value); @@ -99,11 +99,11 @@ Member::Member(const char *name, bool pub, const std::string &value) : _name(nam /** * Constructor * @param name Name of the member - * @param pub Is this a public property (otherwise it is protected) + * @param flags Flag access to a class member (bublic, protected etc) * @param value The value to add * @param size String length */ -Member::Member(const char *name, bool pub, const char *value, int size) : _name(name), _public(pub) +Member::Member(const char *name, const FlagMemb &&flags, const char *value, int size) : _name(name), _accflag(flags) { // create a new string member if (size < 0) size = strlen(value); @@ -113,10 +113,10 @@ Member::Member(const char *name, bool pub, const char *value, int size) : _name( /** * Constructor * @param name Name of the member - * @param pub Is this a public property (otherwise it is protected) + * @param flags Flag access to a class member (bublic, protected etc) * @param value The value to add */ -Member::Member(const char *name, bool pub, double value) : _name(name), _public(pub) +Member::Member(const char *name, const FlagMemb &&flags, double value) : _name(name), _accflag(flags) { // create a new double member _info = new DoubleMember(value); @@ -128,8 +128,12 @@ Member::Member(const char *name, bool pub, double value) : _name(name), _public( * @param pub Is this a public method (otherwise it is protected) * @param method The method to add */ -Member::Member(const char *name, bool pub, const _Method &method, const std::initializer_list<Argument> &arguments) : _name(name), _public(pub) +Member::Member(const char *name, const FlagMemb &&flags, const _Method &method, const std::initializer_list<Argument> &arguments) : _name(name), _accflag(flags) { + // If the flags specifies as Zend::AccMemb::CONSTANT. + // That is: if( flags == Flag(Zend::AccMemb::CONSTANT) ) ... + //XXX Flag(Zend::AccMemb::PUBLIC) -> Flag(Zend::AccMemb::STATIC) + if(!flags) _accflag = Flag(Zend::AccMemb::PUBLIC); // create method member _info = new MethodMember(name, method, arguments); } @@ -138,12 +142,12 @@ Member::Member(const char *name, bool pub, const _Method &method, const std::ini * Copy constructor * @param member The member to copy */ -Member::Member(const Member &member) +Member::Member(const Member &member) : _accflag(member._accflag) { // copy info object, and name and public members _info = member._info; _name = member._name; - _public = member._public; + //_accflag = member._accflag; // update refcount in info object _info->refcount(+1); @@ -153,12 +157,12 @@ Member::Member(const Member &member) * Move constructor * @param member The member to move */ -Member::Member(Member &&member) +Member::Member(Member &&member) : _accflag (std::move(member._accflag)) { // move info object, and name and public properties _info = member._info; _name = std::move(member._name); - _public = member._public; + //_accflag = std::move(member._accflag); // reset info in other object member._info = NULL; @@ -201,7 +205,10 @@ bool Member::isMethod() void Member::declare(struct _zend_class_entry *entry) { // let the info object handle stuff - _info->declare(entry, _name.c_str(), _name.size(), _public ? ZEND_ACC_PUBLIC : ZEND_ACC_PROTECTED TSRMLS_CC); + if(!_accflag) // That is: if( flags == Flag(Zend::AccMemb::CONSTANT) ) + _info->declareConst(entry, _name.c_str(), _name.size() TSRMLS_CC); + else + _info->declare(entry, _name.c_str(), _name.size(), _accflag TSRMLS_CC); } /** @@ -213,7 +220,7 @@ void Member::declare(struct _zend_class_entry *entry) void Member::fill(struct _zend_function_entry *entry, const char *classname) { // let the info object do this - _info->fill(entry, classname, _public); + _info->fill(entry, classname, _accflag); } /** |