root/tools/perf/util/strfilter.h

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

INCLUDED FROM


   1 /* SPDX-License-Identifier: GPL-2.0 */
   2 #ifndef __PERF_STRFILTER_H
   3 #define __PERF_STRFILTER_H
   4 /* General purpose glob matching filter */
   5 
   6 #include <linux/list.h>
   7 #include <stdbool.h>
   8 
   9 /* A node of string filter */
  10 struct strfilter_node {
  11         struct strfilter_node *l;       /* Tree left branche (for &,|) */
  12         struct strfilter_node *r;       /* Tree right branche (for !,&,|) */
  13         const char *p;          /* Operator or rule */
  14 };
  15 
  16 /* String filter */
  17 struct strfilter {
  18         struct strfilter_node *root;
  19 };
  20 
  21 /**
  22  * strfilter__new - Create a new string filter
  23  * @rules: Filter rule, which is a combination of glob expressions.
  24  * @err: Pointer which points an error detected on @rules
  25  *
  26  * Parse @rules and return new strfilter. Return NULL if an error detected.
  27  * In that case, *@err will indicate where it is detected, and *@err is NULL
  28  * if a memory allocation is failed.
  29  */
  30 struct strfilter *strfilter__new(const char *rules, const char **err);
  31 
  32 /**
  33  * strfilter__or - Append an additional rule by logical-or
  34  * @filter: Original string filter
  35  * @rules: Filter rule to be appended at left of the root of
  36  *         @filter by using logical-or.
  37  * @err: Pointer which points an error detected on @rules
  38  *
  39  * Parse @rules and join it to the @filter by using logical-or.
  40  * Return 0 if success, or return the error code.
  41  */
  42 int strfilter__or(struct strfilter *filter,
  43                   const char *rules, const char **err);
  44 
  45 /**
  46  * strfilter__add - Append an additional rule by logical-and
  47  * @filter: Original string filter
  48  * @rules: Filter rule to be appended at left of the root of
  49  *         @filter by using logical-and.
  50  * @err: Pointer which points an error detected on @rules
  51  *
  52  * Parse @rules and join it to the @filter by using logical-and.
  53  * Return 0 if success, or return the error code.
  54  */
  55 int strfilter__and(struct strfilter *filter,
  56                    const char *rules, const char **err);
  57 
  58 /**
  59  * strfilter__compare - compare given string and a string filter
  60  * @filter: String filter
  61  * @str: target string
  62  *
  63  * Compare @str and @filter. Return true if the str match the rule
  64  */
  65 bool strfilter__compare(struct strfilter *filter, const char *str);
  66 
  67 /**
  68  * strfilter__delete - delete a string filter
  69  * @filter: String filter to delete
  70  *
  71  * Delete @filter.
  72  */
  73 void strfilter__delete(struct strfilter *filter);
  74 
  75 /**
  76  * strfilter__string - Reconstruct a rule string from filter
  77  * @filter: String filter to reconstruct
  78  *
  79  * Reconstruct a rule string from @filter. This will be good for
  80  * debug messages. Note that returning string must be freed afterward.
  81  */
  82 char *strfilter__string(struct strfilter *filter);
  83 
  84 #endif

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