[ovs-dev] [cleanups 11/13] hmap: New macro HMAP_FOR_EACH_CONTINUE.

Ethan Jackson ethan at nicira.com
Fri Nov 12 23:25:59 UTC 2010


Looks fine.

On Fri, Oct 29, 2010 at 4:38 PM, Ben Pfaff <blp at nicira.com> wrote:
> ---
>  lib/hmap.h |   18 +++++++++++++-----
>  1 files changed, 13 insertions(+), 5 deletions(-)
>
> diff --git a/lib/hmap.h b/lib/hmap.h
> index 3929c9c..674c6c7 100644
> --- a/lib/hmap.h
> +++ b/lib/hmap.h
> @@ -133,17 +133,17 @@ static inline struct hmap_node *hmap_first_in_bucket(const struct hmap *,
>                                                      size_t hash);
>  static inline struct hmap_node *hmap_next_in_bucket(const struct hmap_node *);
>
> -/* Iteration.
> - *
> - * The _SAFE version is needed when NODE may be freed.  It is not needed when
> - * NODE may be removed from the hash map but its members remain accessible and
> - * intact. */
> +/* Iteration. */
> +
> +/* Iterates through every node in HMAP. */
>  #define HMAP_FOR_EACH(NODE, MEMBER, HMAP)                               \
>     for ((NODE) = OBJECT_CONTAINING(hmap_first(HMAP), NODE, MEMBER);    \
>          &(NODE)->MEMBER != NULL;                                       \
>          (NODE) = OBJECT_CONTAINING(hmap_next(HMAP, &(NODE)->MEMBER),   \
>                                     NODE, MEMBER))
>
> +/* Safe when NODE may be freed (not needed when NODE may be removed from the
> + * hash map but its members remain accessible and intact). */
>  #define HMAP_FOR_EACH_SAFE(NODE, NEXT, MEMBER, HMAP)                    \
>     for ((NODE) = OBJECT_CONTAINING(hmap_first(HMAP), NODE, MEMBER);    \
>          (&(NODE)->MEMBER != NULL                                       \
> @@ -152,6 +152,14 @@ static inline struct hmap_node *hmap_next_in_bucket(const struct hmap_node *);
>           : 0);                                                         \
>          (NODE) = (NEXT))
>
> +/* Continues an iteration from just after NODE. */
> +#define HMAP_FOR_EACH_CONTINUE(NODE, MEMBER, HMAP)                      \
> +    for ((NODE) = OBJECT_CONTAINING(hmap_next(HMAP, &(NODE)->MEMBER),   \
> +                                    NODE, MEMBER);                      \
> +         &(NODE)->MEMBER != NULL;                                       \
> +         (NODE) = OBJECT_CONTAINING(hmap_next(HMAP, &(NODE)->MEMBER),   \
> +                                    NODE, MEMBER))
> +
>  static inline struct hmap_node *hmap_first(const struct hmap *);
>  static inline struct hmap_node *hmap_next(const struct hmap *,
>                                           const struct hmap_node *);
> --
> 1.7.1
>
>
> _______________________________________________
> dev mailing list
> dev at openvswitch.org
> http://openvswitch.org/mailman/listinfo/dev_openvswitch.org
>




More information about the dev mailing list