Looks Good.

On Fri, Mar 25, 2011 at 3:40 PM, Ben Pfaff <b...@nicira.com> wrote:
> Should be slightly cheaper than sorting a list (O(n) vs. O(n lg n)).
> ---
>  lib/ovsdb-parser.c |   14 ++++++--------
>  lib/ovsdb-parser.h |    6 +++---
>  2 files changed, 9 insertions(+), 11 deletions(-)
>
> diff --git a/lib/ovsdb-parser.c b/lib/vsdb-parser.c
> index 2a4c3d9..e1832a9 100644
> --- a/lib/ovsdb-parser.c
> +++ b/lib/ovsdb-parser.c
> @@ -1,4 +1,4 @@
> -/* Copyright (c) 2009 Nicira Networks
> +/* Copyright (c) 2009, 2011 Nicira Networks
>  *
>  * Licensed under the Apache License, Version 2.0 (the "License");
>  * you may not use this file except in compliance with the License.
> @@ -32,7 +32,7 @@ ovsdb_parser_init(struct ovsdb_parser *parser, const struct 
> json *json,
>     parser->name = xvasprintf(name, args);
>     va_end(args);
>
> -    svec_init(&parser->used);
> +    sset_init(&parser->used);
>     parser->error = NULL;
>
>     parser->json = (json && json->type == JSON_OBJECT ? json : NULL);
> @@ -85,7 +85,7 @@ ovsdb_parser_member(struct ovsdb_parser *parser, const char 
> *name,
>         || (types & OP_ID && value->type == JSON_STRING
>             && ovsdb_parser_is_id(value->u.string)))
>     {
> -        svec_add(&parser->used, name);
> +        sset_add(&parser->used, name);
>         return value;
>     } else {
>         ovsdb_parser_raise_error(parser, "Type mismatch for member '%s'.",
> @@ -133,14 +133,12 @@ ovsdb_parser_finish(struct ovsdb_parser *parser)
>         const struct shash *object = json_object(parser->json);
>         size_t n_unused;
>
> -        /* XXX this method of detecting unused members can be made cheaper */
> -        svec_sort_unique(&parser->used);
> -        n_unused = shash_count(object) - parser->used.n;
> +        n_unused = shash_count(object) - sset_count(&parser->used);
>         if (n_unused) {
>             struct shash_node *node;
>
>             SHASH_FOR_EACH (node, object) {
> -                if (!svec_contains(&parser->used, node->name)) {
> +                if (!sset_contains(&parser->used, node->name)) {
>                     if (n_unused > 1) {
>                         ovsdb_parser_raise_error(
>                             parser,
> @@ -160,7 +158,7 @@ ovsdb_parser_finish(struct ovsdb_parser *parser)
>     }
>
>     free(parser->name);
> -    svec_destroy(&parser->used);
> +    sset_destroy(&parser->used);
>
>     return parser->error;
>  }
> diff --git a/lib/ovsdb-parser.h b/lib/ovsdb-parser.h
> index d6270bb..44586aa 100644
> --- a/lib/ovsdb-parser.h
> +++ b/lib/ovsdb-parser.h
> @@ -1,4 +1,4 @@
> -/* Copyright (c) 2009, 2010 Nicira Networks
> +/* Copyright (c) 2009, 2010, 2011 Nicira Networks
>  *
>  * Licensed under the Apache License, Version 2.0 (the "License");
>  * you may not use this file except in compliance with the License.
> @@ -19,12 +19,12 @@
>  #include <stdbool.h>
>  #include "compiler.h"
>  #include "json.h"
> -#include "svec.h"
> +#include "sset.h"
>  #include "util.h"
>
>  struct ovsdb_parser {
>     char *name;                 /* Used only in error messages. */
> -    struct svec used;           /* Already-parsed names from 'object'. */
> +    struct sset used;           /* Already-parsed names from 'object'. */
>     const struct json *json;    /* JSON object being parsed. */
>     struct ovsdb_error *error;  /* Error signaled, if any. */
>  };
> --
> 1.7.1
>
> _______________________________________________
> 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