Commit-ID: abf5ef72477f9fb559a8a034fd6e6c397bb37e1f Gitweb: http://git.kernel.org/tip/abf5ef72477f9fb559a8a034fd6e6c397bb37e1f Author: Masami Hiramatsu <mhiramat@xxxxxxxxxx> AuthorDate: Tue, 15 Dec 2009 10:31:56 -0500 Committer: Ingo Molnar <mingo@xxxxxxx> CommitDate: Tue, 15 Dec 2009 20:22:02 +0100 perf tools: Add for_each macros for strlist Add for_each iteration macros for strlist. This patch introduces strlist__for_each() and strlist__for_each_safe(), both are similar to list_for_each() and list_for_each_safe(). Signed-off-by: Masami Hiramatsu <mhiramat@xxxxxxxxxx> Cc: Paul Mackerras <paulus@xxxxxxxxx> Cc: Arnaldo Carvalho de Melo <acme@xxxxxxxxxx> Cc: Steven Rostedt <rostedt@xxxxxxxxxxx> Cc: Jim Keniston <jkenisto@xxxxxxxxxx> Cc: Ananth N Mavinakayanahalli <ananth@xxxxxxxxxx> Cc: Christoph Hellwig <hch@xxxxxxxxxxxxx> Cc: Frank Ch. Eigler <fche@xxxxxxxxxx> Cc: Jason Baron <jbaron@xxxxxxxxxx> Cc: K.Prasad <prasad@xxxxxxxxxxxxxxxxxx> Cc: Peter Zijlstra <peterz@xxxxxxxxxxxxx> Cc: Srikar Dronamraju <srikar@xxxxxxxxxxxxxxxxxx> Cc: systemtap <systemtap@xxxxxxxxxxxxxxxxxx> Cc: DLE <dle-develop@xxxxxxxxxxxxxxxxxxxxx> Cc: Frederic Weisbecker <fweisbec@xxxxxxxxx> LKML-Reference: <20091215153156.17436.49157.stgit@xxxxxxxxxxxxxxxxxxxxxxxxxxxxx> Signed-off-by: Ingo Molnar <mingo@xxxxxxx> --- tools/perf/util/strlist.h | 34 ++++++++++++++++++++++++++++++++++ 1 files changed, 34 insertions(+), 0 deletions(-) diff --git a/tools/perf/util/strlist.h b/tools/perf/util/strlist.h index 59091c7..3ba8390 100644 --- a/tools/perf/util/strlist.h +++ b/tools/perf/util/strlist.h @@ -40,5 +40,39 @@ static inline unsigned int strlist__nr_entries(const struct strlist *self) return self->nr_entries; } +/* For strlist iteration */ +static inline struct str_node *strlist__first(struct strlist *self) +{ + struct rb_node *rn = rb_first(&self->entries); + return rn ? rb_entry(rn, struct str_node, rb_node) : NULL; +} +static inline struct str_node *strlist__next(struct str_node *sn) +{ + struct rb_node *rn; + if (!sn) + return NULL; + rn = rb_next(&sn->rb_node); + return rn ? rb_entry(rn, struct str_node, rb_node) : NULL; +} + +/** + * strlist_for_each - iterate over a strlist + * @pos: the &struct str_node to use as a loop cursor. + * @self: the &struct strlist for loop. + */ +#define strlist__for_each(pos, self) \ + for (pos = strlist__first(self); pos; pos = strlist__next(pos)) + +/** + * strlist_for_each_safe - iterate over a strlist safe against removal of + * str_node + * @pos: the &struct str_node to use as a loop cursor. + * @n: another &struct str_node to use as temporary storage. + * @self: the &struct strlist for loop. + */ +#define strlist__for_each_safe(pos, n, self) \ + for (pos = strlist__first(self), n = strlist__next(pos); pos;\ + pos = n, n = strlist__next(n)) + int strlist__parse_list(struct strlist *self, const char *s); #endif /* __PERF_STRLIST_H */ -- To unsubscribe from this list: send the line "unsubscribe linux-tip-commits" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html
![]() |