diff options
author | Graham Leggett <minfrin@apache.org> | 2018-08-30 12:35:05 +0000 |
---|---|---|
committer | Graham Leggett <minfrin@apache.org> | 2018-08-30 12:35:05 +0000 |
commit | 65d947c6caef4f1d8e6eacb23607922d37268e91 (patch) | |
tree | 69f86a19a62e2d32f569cd22f4f07c22aaef83ee /json | |
parent | bbc0f1ddffd0d60e88a0133c50526d210e25036e (diff) | |
download | apr-65d947c6caef4f1d8e6eacb23607922d37268e91.tar.gz |
Add apr_json_object_first() and apr_json_object_next(), allowing the
caller to iterate through object key value pairs.
git-svn-id: https://svn.apache.org/repos/asf/apr/apr/trunk@1839675 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'json')
-rw-r--r-- | json/apr_json.c | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/json/apr_json.c b/json/apr_json.c index 5fb7b5f31..8a4c91d60 100644 --- a/json/apr_json.c +++ b/json/apr_json.c @@ -169,6 +169,42 @@ apr_json_kv_t *apr_json_object_get(apr_json_value_t *object, const char *key, return apr_hash_get(object->value.object->hash, key, klen); } +apr_json_kv_t *apr_json_object_first(apr_json_value_t *obj) +{ + apr_json_kv_t *kv; + + if (obj->type != APR_JSON_OBJECT) { + return NULL; + } + + kv = APR_RING_FIRST(&(obj->value.object)->list); + + if (kv != APR_RING_SENTINEL(&(obj->value.object)->list, apr_json_kv_t, link)) { + return kv; + } + else { + return NULL; + } +} + +apr_json_kv_t *apr_json_object_next(apr_json_value_t *obj, apr_json_kv_t *kv) +{ + apr_json_kv_t *next; + + if (obj->type != APR_JSON_OBJECT) { + return NULL; + } + + next = APR_RING_NEXT((kv), link); + + if (next != APR_RING_SENTINEL(&(obj->value.object)->list, apr_json_kv_t, link)) { + return next; + } + else { + return NULL; + } +} + apr_json_value_t *apr_json_overlay(apr_pool_t *p, apr_json_value_t *overlay, apr_json_value_t *base, int flags) |