From 2a1589daaa39b43e8749adba897f5d824445c837 Mon Sep 17 00:00:00 2001 From: Arnaldo Carvalho de Melo Date: Sat, 11 Jul 2009 12:18:34 -0300 Subject: [PATCH] --- yaml --- r: 155713 b: refs/heads/master c: 27d0fd410c3cee00ece2e55f4354a7a9ec1a6a6a h: refs/heads/master i: 155711: 8fbcd45ebd37f9ac878b67b607af8aa10ded8892 v: v3 --- [refs] | 2 +- trunk/tools/perf/util/strlist.c | 20 ++++++++++++++++++-- trunk/tools/perf/util/strlist.h | 11 +++++++++-- 3 files changed, 28 insertions(+), 5 deletions(-) diff --git a/[refs] b/[refs] index 78a85546280c..95157161df46 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 60c1baf1248e00d423604f018c8af1cf750ad885 +refs/heads/master: 27d0fd410c3cee00ece2e55f4354a7a9ec1a6a6a diff --git a/trunk/tools/perf/util/strlist.c b/trunk/tools/perf/util/strlist.c index 025a78edfffe..7ad38171dc2b 100644 --- a/trunk/tools/perf/util/strlist.c +++ b/trunk/tools/perf/util/strlist.c @@ -64,6 +64,7 @@ int strlist__add(struct strlist *self, const char *new_entry) rb_link_node(&sn->rb_node, parent, p); rb_insert_color(&sn->rb_node, &self->entries); + ++self->nr_entries; return 0; } @@ -155,8 +156,9 @@ struct strlist *strlist__new(bool dupstr, const char *slist) struct strlist *self = malloc(sizeof(*self)); if (self != NULL) { - self->entries = RB_ROOT; - self->dupstr = dupstr; + self->entries = RB_ROOT; + self->dupstr = dupstr; + self->nr_entries = 0; if (slist && strlist__parse_list(self, slist) != 0) goto out_error; } @@ -182,3 +184,17 @@ void strlist__delete(struct strlist *self) free(self); } } + +struct str_node *strlist__entry(const struct strlist *self, unsigned int idx) +{ + struct rb_node *nd; + + for (nd = rb_first(&self->entries); nd; nd = rb_next(nd)) { + struct str_node *pos = rb_entry(nd, struct str_node, rb_node); + + if (!idx--) + return pos; + } + + return NULL; +} diff --git a/trunk/tools/perf/util/strlist.h b/trunk/tools/perf/util/strlist.h index 2fdcfee87586..921818e44a54 100644 --- a/trunk/tools/perf/util/strlist.h +++ b/trunk/tools/perf/util/strlist.h @@ -11,7 +11,8 @@ struct str_node { struct strlist { struct rb_root entries; - bool dupstr; + unsigned int nr_entries; + bool dupstr; }; struct strlist *strlist__new(bool dupstr, const char *slist); @@ -21,11 +22,17 @@ void strlist__remove(struct strlist *self, struct str_node *sn); int strlist__load(struct strlist *self, const char *filename); int strlist__add(struct strlist *self, const char *str); +struct str_node *strlist__entry(const struct strlist *self, unsigned int idx); bool strlist__has_entry(struct strlist *self, const char *entry); static inline bool strlist__empty(const struct strlist *self) { - return rb_first(&self->entries) == NULL; + return self->nr_entries == 0; +} + +static inline unsigned int strlist__nr_entries(const struct strlist *self) +{ + return self->nr_entries; } int strlist__parse_list(struct strlist *self, const char *s);