Commit | Line | Data |
---|---|---|
37bbd3ff DA |
1 | #ifndef __PERF_RBLIST_H |
2 | #define __PERF_RBLIST_H | |
3 | ||
4 | #include <linux/rbtree.h> | |
5 | #include <stdbool.h> | |
6 | ||
7 | /* | |
8 | * create node structs of the form: | |
9 | * struct my_node { | |
10 | * struct rb_node rb_node; | |
11 | * ... my data ... | |
12 | * }; | |
13 | * | |
14 | * create list structs of the form: | |
15 | * struct mylist { | |
16 | * struct rblist rblist; | |
17 | * ... my data ... | |
18 | * }; | |
19 | */ | |
20 | ||
21 | struct rblist { | |
22 | struct rb_root entries; | |
23 | unsigned int nr_entries; | |
24 | ||
25 | int (*node_cmp)(struct rb_node *rbn, const void *entry); | |
26 | struct rb_node *(*node_new)(struct rblist *rlist, const void *new_entry); | |
27 | void (*node_delete)(struct rblist *rblist, struct rb_node *rb_node); | |
28 | }; | |
29 | ||
30 | void rblist__init(struct rblist *rblist); | |
31 | void rblist__delete(struct rblist *rblist); | |
32 | int rblist__add_node(struct rblist *rblist, const void *new_entry); | |
33 | void rblist__remove_node(struct rblist *rblist, struct rb_node *rb_node); | |
34 | struct rb_node *rblist__find(struct rblist *rblist, const void *entry); | |
813335b8 | 35 | struct rb_node *rblist__findnew(struct rblist *rblist, const void *entry); |
37bbd3ff DA |
36 | struct rb_node *rblist__entry(const struct rblist *rblist, unsigned int idx); |
37 | ||
38 | static inline bool rblist__empty(const struct rblist *rblist) | |
39 | { | |
40 | return rblist->nr_entries == 0; | |
41 | } | |
42 | ||
43 | static inline unsigned int rblist__nr_entries(const struct rblist *rblist) | |
44 | { | |
45 | return rblist->nr_entries; | |
46 | } | |
47 | ||
48 | #endif /* __PERF_RBLIST_H */ |