From: Alexander Kuleshov Date: Wed, 16 Mar 2016 18:39:55 GMT Subject: Re: [RFC PATCH] hashmap API: introduce for_each_hashmap_entry() helper macro Message-ID: In-Reply-To: Hello Junio, On Thu, Mar 17, 2016 at 12:09 AM, Junio C Hamano wrote: > Alexander Kuleshov writes: > >> diff --git a/hashmap.h b/hashmap.h >> index ab7958a..b8b158c 100644 >> --- a/hashmap.h >> +++ b/hashmap.h >> @@ -95,4 +95,11 @@ static inline const char *strintern(const char *string) >> return memintern(string, strlen(string)); >> } >> >> +#define for_each_hashmap_entry(map, type) \ >> + struct type *entry; \ >> + struct hashmap_iter iter; \ >> + \ >> + hashmap_iter_init(map, &iter); \ >> + while ((entry = hashmap_iter_next(&iter))) >> + > > This is an easy way to introduce decl-after-statement, i.e. needs an > extra pair of {} around the thing. It also forbids the callers from > defining "entry" and "iter" as their own identifier outside the > scope of this macro and use them inside the block that is iterated > over by shadowing these two variables. > > Other than that, it looks like a good concept. The syntax however > needs more thought because of the above two issues, I think. Thanks for feedback. Will fix first issue and think about second.