summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorEmiel Bruijntjes <emiel.bruijntjes@copernica.com>2013-08-29 19:18:10 +0200
committerEmiel Bruijntjes <emiel.bruijntjes@copernica.com>2013-08-29 19:18:10 +0200
commitb8d747580db76bc3e51bae6c3cdae49b5b44e20b (patch)
tree4538aa1ba20f579e887881d572440f60e1d3db5a /include
parent3537cce27590c6197ffe458ac6cc7dee39040e7b (diff)
work in progress on nested arrays (still crashes with sigsegv)
Diffstat (limited to 'include')
-rw-r--r--include/member.h92
1 files changed, 34 insertions, 58 deletions
diff --git a/include/member.h b/include/member.h
index 86e3554..49ac246 100644
--- a/include/member.h
+++ b/include/member.h
@@ -36,68 +36,22 @@ public:
virtual ~Member() {}
/**
- * Assign a numeric value
- * @param value
- * @return Member
- */
- Member &operator=(long value)
- {
- _value->set(_index, value);
- return *this;
- }
-
- /**
- * Assign a numeric value
- * @param value
- * @return Member
- */
- Member &operator=(int value)
- {
- _value->set(_index, value);
- return *this;
- }
-
- /**
- * Assign a double value
+ * Assign a value object to the array
* @param value
* @return Member
*/
- Member &operator=(double value)
- {
- _value->set(_index, value);
- return *this;
- }
-
- /**
- * Assign a boolean value
- * @param value
- * @return Member
- */
- Member &operator=(bool value)
- {
- _value->set(_index, value);
- return *this;
- }
-
- /**
- * Assign a string value
- * @param value
- * @return Member
- */
- Member &operator=(const std::string &value)
- {
- _value->set(_index, value);
- return *this;
- }
-
- /**
- * Assign a byte array value
- * @param value
- * @return Member
- */
- Member &operator=(const char *value)
+ Member &operator=(const Value &value)
{
+ // set property in parent array
_value->set(_index, value);
+
+ // leap out if this is not a nested array access
+ //if (!_parent) return *this;
+
+ // nested array access, we need to update the parent too
+ //_parent->operator=(*_value);
+
+ // done
return *this;
}
@@ -174,7 +128,7 @@ public:
{
return _value->get(_index)[index];
}
-
+
/**
* Array access operator
* This can be used for accessing associative arrays
@@ -212,6 +166,16 @@ private:
Member(const Member<Type> &member) : _value(member._value), _index(member._index) {}
/**
+ * Set the member
+ * @param member
+ */
+ Member<Type> &add(Member *parent)
+ {
+ _parent = parent;
+ return *this;
+ }
+
+ /**
* The array of which this is a member
* @var Value
*/
@@ -224,6 +188,18 @@ private:
Type _index;
/**
+ * Parent member
+ *
+ * When accessing nested arrays a["a"]["b"] = 'true', the member
+ * object that represents the "b" entry holds a pointer to the member
+ * object that represents "a", so that it can tell its parent to
+ * store itself in the top array too
+ *
+ * @var Member
+ */
+ Member *_parent = nullptr;
+
+ /**
* Value objects may create members
*/
friend class Value;