|
From: tip-bot f. M. H. <mhi...@re...> - 2009-12-15 19:27:59
|
Commit-ID: abf5ef72477f9fb559a8a034fd6e6c397bb37e1f Gitweb: http://git.kernel.org/tip/abf5ef72477f9fb559a8a034fd6e6c397bb37e1f Author: Masami Hiramatsu <mhi...@re...> AuthorDate: Tue, 15 Dec 2009 10:31:56 -0500 Committer: Ingo Molnar <mi...@el...> 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 <mhi...@re...> Cc: Paul Mackerras <pa...@sa...> Cc: Arnaldo Carvalho de Melo <ac...@re...> Cc: Steven Rostedt <ro...@go...> Cc: Jim Keniston <jke...@us...> Cc: Ananth N Mavinakayanahalli <an...@in...> Cc: Christoph Hellwig <hc...@in...> Cc: Frank Ch. Eigler <fc...@re...> Cc: Jason Baron <jb...@re...> Cc: K.Prasad <pr...@li...> Cc: Peter Zijlstra <pe...@in...> Cc: Srikar Dronamraju <sr...@li...> Cc: systemtap <sys...@so...> Cc: DLE <dle...@li...> Cc: Frederic Weisbecker <fwe...@gm...> LKML-Reference: <200...@dh...> Signed-off-by: Ingo Molnar <mi...@el...> --- 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 */ |