diff options
author | Emiel Bruijntjes <emiel.bruijntjes@copernica.com> | 2014-03-14 13:54:39 +0100 |
---|---|---|
committer | Emiel Bruijntjes <emiel.bruijntjes@copernica.com> | 2014-03-14 13:54:39 +0100 |
commit | a525d95b26fa6e4afdca803a8f77579cd26cedc6 (patch) | |
tree | d0bbaecbaa4f477ea7f5b7f30c05d0dc63229d8a /src/property.h | |
parent | 1f1a0fa9349d37e623ae763b48c7ea21681cd45b (diff) |
added extra property methods to allow both const and non-const setters and getters, updated documentation
Diffstat (limited to 'src/property.h')
-rw-r--r-- | src/property.h | 100 |
1 files changed, 89 insertions, 11 deletions
diff --git a/src/property.h b/src/property.h index 589b58c..f0fd46f 100644 --- a/src/property.h +++ b/src/property.h @@ -22,13 +22,31 @@ private: * The getter * @var getter_callback */ - getter_callback _getter = nullptr; + union { + getter_callback_0 g0; + getter_callback_1 g1; + } _getter; /** * The setter * @var setter_callback */ - setter_callback _setter = nullptr; + union { + setter_callback_0 s0; + setter_callback_1 s1; + } _setter; + + /** + * Type of getter + * @var char + */ + int _gtype = 0; + + /** + * Type of setter + * @var char + */ + int _stype = 100; public: /** @@ -36,20 +54,77 @@ public: * @param getter * @param setter */ - Property(const getter_callback &getter, const setter_callback &setter) : - _getter(getter), _setter(setter) {} - + Property(const getter_callback_0 &getter) : _gtype(0) + { + _getter.g0 = getter; + } + + /** + * Constructor + * @param getter + * @param setter + */ + Property(const getter_callback_1 &getter) : _gtype(1) + { + _getter.g1 = getter; + } + + + /** + * Constructor + * @param getter + * @param setter + */ + Property(const getter_callback_0 &getter, const setter_callback_0 &setter) : _gtype(0), _stype(0) + { + _getter.g0 = getter; + _setter.s0 = setter; + } + + /** + * Constructor + * @param getter + * @param setter + */ + Property(const getter_callback_1 &getter, const setter_callback_0 &setter) : _gtype(1), _stype(0) + { + _getter.g1 = getter; + _setter.s0 = setter; + } + + /** + * Constructor + * @param getter + * @param setter + */ + Property(const getter_callback_0 &getter, const setter_callback_1 &setter) : _gtype(0), _stype(1) + { + _getter.g0 = getter; + _setter.s1 = setter; + } + + /** + * Constructor + * @param getter + * @param setter + */ + Property(const getter_callback_1 &getter, const setter_callback_1 &setter) : _gtype(1), _stype(1) + { + _getter.g1 = getter; + _setter.s1 = setter; + } + /** * Copy constructor * @param that */ Property(const Property &that) : - _getter(that._getter), _setter(that._setter) {} + _getter(that._getter), _setter(that._setter), _gtype(that._gtype), _stype(that._stype) {} /** * Destructor */ - virtual ~Property(); + virtual ~Property() {} /** * Get the property @@ -58,7 +133,8 @@ public: */ Value get(Base *base) { - return (base->*_getter)(); + if (_gtype == 0) return (base->*_getter.g0)(); + else return (base->*_getter.g1)(); } /** @@ -69,9 +145,11 @@ public: */ bool set(Base *base, const Value &value) { - if (!_setter) return false; - (base->*_setter)(value); - return false; + switch (_stype) { + case 0: (base->*_setter.s0)(value); return true; + case 1: (base->*_setter.s1)(value); return true; + default: return false; + } } }; |