forked from Minki/linux
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@redhat.com> Cc: Paul Mackerras <paulus@samba.org> Cc: Arnaldo Carvalho de Melo <acme@redhat.com> Cc: Steven Rostedt <rostedt@goodmis.org> Cc: Jim Keniston <jkenisto@us.ibm.com> Cc: Ananth N Mavinakayanahalli <ananth@in.ibm.com> Cc: Christoph Hellwig <hch@infradead.org> Cc: Frank Ch. Eigler <fche@redhat.com> Cc: Jason Baron <jbaron@redhat.com> Cc: K.Prasad <prasad@linux.vnet.ibm.com> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Srikar Dronamraju <srikar@linux.vnet.ibm.com> Cc: systemtap <systemtap@sources.redhat.com> Cc: DLE <dle-develop@lists.sourceforge.net> Cc: Frederic Weisbecker <fweisbec@gmail.com> LKML-Reference: <20091215153156.17436.49157.stgit@dhcp-100-2-132.bos.redhat.com> Signed-off-by: Ingo Molnar <mingo@elte.hu>
This commit is contained in:
parent
3e3405906d
commit
abf5ef7247
@ -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 */
|
||||
|
Loading…
Reference in New Issue
Block a user