Looks good to me.  Really clean actually.

Ethan

On Wed, Jun 27, 2012 at 1:25 PM, Ben Pfaff <b...@nicira.com> wrote:
> These will acquire a caller in an upcoming commit.
>
> Signed-off-by: Ben Pfaff <b...@nicira.com>
> ---
>  lib/smap.c |   36 ++++++++++++++++++++++++++++++++++++
>  lib/smap.h |    5 +++++
>  2 files changed, 41 insertions(+), 0 deletions(-)
>
> diff --git a/lib/smap.c b/lib/smap.c
> index 8665321..e612ac7 100644
> --- a/lib/smap.c
> +++ b/lib/smap.c
> @@ -18,6 +18,7 @@
>  #include <assert.h>
>
>  #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 51f6397..8510a37 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 */
> --
> 1.7.2.5
>
> _______________________________________________
> dev mailing list
> dev@openvswitch.org
> http://openvswitch.org/mailman/listinfo/dev
_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to