summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorEmiel Bruijntjes <emiel.bruijntjes@copernica.com>2014-03-14 13:54:39 +0100
committerEmiel Bruijntjes <emiel.bruijntjes@copernica.com>2014-03-14 13:54:39 +0100
commita525d95b26fa6e4afdca803a8f77579cd26cedc6 (patch)
treed0bbaecbaa4f477ea7f5b7f30c05d0dc63229d8a /src
parent1f1a0fa9349d37e623ae763b48c7ea21681cd45b (diff)
added extra property methods to allow both const and non-const setters and getters, updated documentation
Diffstat (limited to 'src')
-rw-r--r--src/classbase.cpp61
-rw-r--r--src/property.h100
2 files changed, 149 insertions, 12 deletions
diff --git a/src/classbase.cpp b/src/classbase.cpp
index 1773890..09850a7 100644
--- a/src/classbase.cpp
+++ b/src/classbase.cpp
@@ -1686,15 +1686,74 @@ void ClassBase::property(const char *name, double value, int flags)
* Set property with callbacks
* @param name Name of the property
* @param getter Getter method
+ */
+void ClassBase::property(const char *name, const getter_callback_0 &getter)
+{
+ // add property
+ _properties[name] = std::make_shared<Property>(getter);
+}
+
+/**
+ * Set property with callbacks
+ * @param name Name of the property
+ * @param getter Getter method
+ */
+void ClassBase::property(const char *name, const getter_callback_1 &getter)
+{
+ // add property
+ _properties[name] = std::make_shared<Property>(getter);
+}
+
+/**
+ * Set property with callbacks
+ * @param name Name of the property
+ * @param getter Getter method
+ * @param setter Setter method
+ */
+void ClassBase::property(const char *name, const getter_callback_0 &getter, const setter_callback_0 &setter)
+{
+ // add property
+ _properties[name] = std::make_shared<Property>(getter,setter);
+}
+
+/**
+ * Set property with callbacks
+ * @param name Name of the property
+ * @param getter Getter method
+ * @param setter Setter method
+ */
+void ClassBase::property(const char *name, const getter_callback_1 &getter, const setter_callback_0 &setter)
+{
+ // add property
+ _properties[name] = std::make_shared<Property>(getter,setter);
+}
+
+/**
+ * Set property with callbacks
+ * @param name Name of the property
+ * @param getter Getter method
* @param setter Setter method
*/
-void ClassBase::property(const char *name, const getter_callback &getter, const setter_callback &setter)
+void ClassBase::property(const char *name, const getter_callback_0 &getter, const setter_callback_1 &setter)
{
// add property
_properties[name] = std::make_shared<Property>(getter,setter);
}
/**
+ * Set property with callbacks
+ * @param name Name of the property
+ * @param getter Getter method
+ * @param setter Setter method
+ */
+void ClassBase::property(const char *name, const getter_callback_1 &getter, const setter_callback_1 &setter)
+{
+ // add property
+ _properties[name] = std::make_shared<Property>(getter,setter);
+}
+
+
+/**
* End namespace
*/
}
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;
+ }
}
};