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