From: Ben Pfaff Date: Wed, 23 May 2012 00:12:22 +0000 (-0700) Subject: smap: New functions smap_from_json(), smap_to_json(). X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=cccc13569249376eb2e1a364e07dfc33a745d791;p=openvswitch smap: New functions smap_from_json(), smap_to_json(). These will acquire a caller in an upcoming commit. Signed-off-by: Ben Pfaff --- diff --git a/lib/smap.c b/lib/smap.c index 86653215..e612ac7b 100644 --- a/lib/smap.c +++ b/lib/smap.c @@ -18,6 +18,7 @@ #include #include "hash.h" +#include "json.h" static struct smap_node *smap_add__(struct smap *, char *, void *, size_t hash); @@ -232,6 +233,41 @@ smap_sort(const struct smap *smap) return nodes; } } + +/* Adds each of the key-value pairs from 'json' (which must be a JSON object + * whose values are strings) to 'smap'. + * + * The caller must have initialized 'smap'. + * + * The caller retains ownership of 'json' and everything in it. */ +void +smap_from_json(struct smap *smap, const struct json *json) +{ + const struct shash_node *node; + + SHASH_FOR_EACH (node, json_object(json)) { + const struct json *value = node->data; + smap_add(smap, node->name, json_string(value)); + } +} + +/* Returns a JSON object that maps from the keys in 'smap' to their values. + * + * The caller owns the returned value and must eventually json_destroy() it. + * + * The caller retains ownership of 'smap' and everything in it. */ +struct json * +smap_to_json(const struct smap *smap) +{ + const struct smap_node *node; + struct json *json; + + json = json_object_create(); + SMAP_FOR_EACH (node, smap) { + json_object_put_string(json, node->key, node->value); + } + return json; +} /* Private Helpers. */ diff --git a/lib/smap.h b/lib/smap.h index 51f6397c..8510a376 100644 --- a/lib/smap.h +++ b/lib/smap.h @@ -17,6 +17,8 @@ #include "hmap.h" +struct json; + /* A map from string to string. */ struct smap { struct hmap map; /* Contains "struct smap_node"s. */ @@ -60,4 +62,7 @@ size_t smap_count(const struct smap *); void smap_clone(struct smap *dst, const struct smap *src); const struct smap_node **smap_sort(const struct smap *); +void smap_from_json(struct smap *, const struct json *); +struct json *smap_to_json(const struct smap *); + #endif /* smap.h */