@@ -150,6 +150,7 @@ class JsonValue : public api::ExecutionContext {
150
150
private:
151
151
friend class JsonDocument ;
152
152
friend class JsonObjectIterator ;
153
+ friend class JsonArrayIterator ;
153
154
friend class JsonObject ;
154
155
friend class JsonArray ;
155
156
friend class JsonTrue ;
@@ -219,7 +220,7 @@ class JsonObjectIterator : private JsonApi {
219
220
return m_json_iter != a.m_json_iter ;
220
221
}
221
222
222
- JsonObject operator *() const noexcept ;
223
+ JsonValue operator *() const noexcept ;
223
224
224
225
JsonObjectIterator &operator ++() {
225
226
m_json_iter = api ()->object_iter_next (m_json_value, m_json_iter);
@@ -306,19 +307,66 @@ class JsonObject : public JsonValue {
306
307
JsonObject &clear ();
307
308
308
309
JsonValue at (const var::StringView key) const ;
310
+ JsonValue at (size_t offset) const ;
309
311
310
312
KeyList get_key_list () const ;
311
313
312
314
private:
313
315
json_t *create () override ;
314
316
};
315
317
318
+ class JsonArrayIterator : private JsonApi {
319
+ public:
320
+
321
+ JsonArrayIterator () = default ;
322
+
323
+ JsonArrayIterator (json_t * value, size_t index){
324
+ m_json_value = value;
325
+ m_index = index ;
326
+ }
327
+
328
+
329
+ bool operator !=(JsonArrayIterator const &a) const noexcept {
330
+ return m_index != a.m_index ;
331
+ }
332
+
333
+ JsonValue operator *() const noexcept {
334
+ return api ()->array_get (m_json_value, m_index);
335
+ }
336
+
337
+ JsonArrayIterator &operator ++() {
338
+ m_index++;
339
+ return *this ;
340
+ }
341
+
342
+
343
+ private:
344
+ json_t * m_json_value = nullptr ;
345
+ size_t m_index = 0 ;
346
+ };
347
+
316
348
class JsonArray : public JsonValue {
317
349
public:
318
350
JsonArray ();
319
351
JsonArray (const JsonArray &value);
320
352
JsonArray &operator =(const JsonArray &value);
321
353
354
+ JsonArrayIterator begin () const noexcept {
355
+ return JsonArrayIterator (m_value, 0 );
356
+ }
357
+
358
+ JsonArrayIterator end () const noexcept {
359
+ return JsonArrayIterator (m_value, count ());
360
+ }
361
+
362
+ JsonArrayIterator cbegin () const noexcept {
363
+ return JsonArrayIterator (m_value, 0 );
364
+ }
365
+
366
+ JsonArrayIterator cend () const noexcept {
367
+ return JsonArrayIterator (m_value, count ());
368
+ }
369
+
322
370
explicit JsonArray (const var::StringList &list);
323
371
explicit JsonArray (const var::StringViewList &list);
324
372
explicit JsonArray (const var::Vector<float > &list);
0 commit comments