diff options
author | Allan Sandfeld Jensen <allan.jensen@digia.com> | 2014-08-15 15:41:44 +0200 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@digia.com> | 2014-08-25 16:03:42 +0200 |
commit | 7dce96220003e3fa3f932341aaecd8e7f55f4d95 (patch) | |
tree | a8bafd0eca632b98f84b2a1f8b5424d8a13dccf0 /src/corelib/json/qjsonarray.h | |
parent | f16de5c1fd8cf0e9d6a37aaa771144ccc4220fba (diff) |
Add operator-> to QJson iterators
The iterators for QJsonArray and QJsonObject are currently lacking an
operator-> definition. Unfortunately it is not possible to do in clean
way without redefining either the iterators or QJsonValueRef class.
This patch instead adds two fake pointer classes that are only used
to handle the operator-> return value.
Task-number: QTBUG-29573
Change-Id: Ief785a6afbbedc9e89cf3b6f3958c2c755997a66
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Diffstat (limited to 'src/corelib/json/qjsonarray.h')
-rw-r--r-- | src/corelib/json/qjsonarray.h | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/src/corelib/json/qjsonarray.h b/src/corelib/json/qjsonarray.h index 4cada7cec1..f3efa3d201 100644 --- a/src/corelib/json/qjsonarray.h +++ b/src/corelib/json/qjsonarray.h @@ -112,14 +112,17 @@ public: typedef std::random_access_iterator_tag iterator_category; typedef int difference_type; typedef QJsonValue value_type; - //typedef T *pointer; typedef QJsonValueRef reference; inline iterator() : a(0), i(0) { } explicit inline iterator(QJsonArray *array, int index) : a(array), i(index) { } inline QJsonValueRef operator*() const { return QJsonValueRef(a, i); } - //inline T *operator->() const { return &concrete(i)->value; } +#ifdef Q_QDOC + inline QJsonValueRef* operator->() const; +#else + inline QJsonValueRefPtr operator->() const { return QJsonValueRefPtr(a, i); } +#endif inline QJsonValueRef operator[](int j) const { return QJsonValueRef(a, i + j); } inline bool operator==(const iterator &o) const { return i == o.i; } @@ -153,7 +156,6 @@ public: typedef std::random_access_iterator_tag iterator_category; typedef qptrdiff difference_type; typedef QJsonValue value_type; - //typedef const T *pointer; typedef QJsonValue reference; inline const_iterator() : a(0), i(0) { } @@ -162,7 +164,11 @@ public: inline const_iterator(const iterator &o) : a(o.a), i(o.i) {} inline QJsonValue operator*() const { return a->at(i); } - //inline T *operator->() const { return &concrete(i)->value; } +#ifdef Q_QDOC + inline QJsonValue* operator->() const; +#else + inline QJsonValuePtr operator->() const { return QJsonValuePtr(a->at(i)); } +#endif inline QJsonValue operator[](int j) const { return a->at(i+j); } inline bool operator==(const const_iterator &o) const { return i == o.i; } inline bool operator!=(const const_iterator &o) const { return i != o.i; } |