root/tools/perf/util/intlist.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. intlist__has_entry
  2. intlist__empty
  3. intlist__nr_entries
  4. intlist__first
  5. intlist__next

   1 /* SPDX-License-Identifier: GPL-2.0 */
   2 #ifndef __PERF_INTLIST_H
   3 #define __PERF_INTLIST_H
   4 
   5 #include <linux/rbtree.h>
   6 #include <stdbool.h>
   7 
   8 #include "rblist.h"
   9 
  10 struct int_node {
  11         struct rb_node rb_node;
  12         int i;
  13         void *priv;
  14 };
  15 
  16 struct intlist {
  17         struct rblist rblist;
  18 };
  19 
  20 struct intlist *intlist__new(const char *slist);
  21 void intlist__delete(struct intlist *ilist);
  22 
  23 void intlist__remove(struct intlist *ilist, struct int_node *in);
  24 int intlist__add(struct intlist *ilist, int i);
  25 
  26 struct int_node *intlist__entry(const struct intlist *ilist, unsigned int idx);
  27 struct int_node *intlist__find(struct intlist *ilist, int i);
  28 struct int_node *intlist__findnew(struct intlist *ilist, int i);
  29 
  30 static inline bool intlist__has_entry(struct intlist *ilist, int i)
  31 {
  32         return intlist__find(ilist, i) != NULL;
  33 }
  34 
  35 static inline bool intlist__empty(const struct intlist *ilist)
  36 {
  37         return rblist__empty(&ilist->rblist);
  38 }
  39 
  40 static inline unsigned int intlist__nr_entries(const struct intlist *ilist)
  41 {
  42         return rblist__nr_entries(&ilist->rblist);
  43 }
  44 
  45 /* For intlist iteration */
  46 static inline struct int_node *intlist__first(struct intlist *ilist)
  47 {
  48         struct rb_node *rn = rb_first_cached(&ilist->rblist.entries);
  49         return rn ? rb_entry(rn, struct int_node, rb_node) : NULL;
  50 }
  51 static inline struct int_node *intlist__next(struct int_node *in)
  52 {
  53         struct rb_node *rn;
  54         if (!in)
  55                 return NULL;
  56         rn = rb_next(&in->rb_node);
  57         return rn ? rb_entry(rn, struct int_node, rb_node) : NULL;
  58 }
  59 
  60 /**
  61  * intlist__for_each_entry      - iterate over a intlist
  62  * @pos:        the &struct int_node to use as a loop cursor.
  63  * @ilist:      the &struct intlist for loop.
  64  */
  65 #define intlist__for_each_entry(pos, ilist)     \
  66         for (pos = intlist__first(ilist); pos; pos = intlist__next(pos))
  67 
  68 /**
  69  * intlist__for_each_entry_safe - iterate over a intlist safe against removal of
  70  *                         int_node
  71  * @pos:        the &struct int_node to use as a loop cursor.
  72  * @n:          another &struct int_node to use as temporary storage.
  73  * @ilist:      the &struct intlist for loop.
  74  */
  75 #define intlist__for_each_entry_safe(pos, n, ilist)     \
  76         for (pos = intlist__first(ilist), n = intlist__next(pos); pos;\
  77              pos = n, n = intlist__next(n))
  78 #endif /* __PERF_INTLIST_H */

/* [<][>][^][v][top][bottom][index][help] */