1e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#ifndef __PERF_STRFILTER_H
2e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#define __PERF_STRFILTER_H
3e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng/* General purpose glob matching filter */
4e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
5e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#include <linux/list.h>
6e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#include <stdbool.h>
7e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
8e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng/* A node of string filter */
9e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstruct strfilter_node {
10e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	struct strfilter_node *l;	/* Tree left branche (for &,|) */
11e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	struct strfilter_node *r;	/* Tree right branche (for !,&,|) */
12e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	const char *p;		/* Operator or rule */
13e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng};
14e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
15e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng/* String filter */
16e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstruct strfilter {
17e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	struct strfilter_node *root;
18e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng};
19e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
20e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng/**
21e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * strfilter__new - Create a new string filter
22e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * @rules: Filter rule, which is a combination of glob expressions.
23e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * @err: Pointer which points an error detected on @rules
24e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng *
25e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * Parse @rules and return new strfilter. Return NULL if an error detected.
26e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * In that case, *@err will indicate where it is detected, and *@err is NULL
27e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * if a memory allocation is failed.
28e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng */
29e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstruct strfilter *strfilter__new(const char *rules, const char **err);
30e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
31e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng/**
32e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * strfilter__compare - compare given string and a string filter
33e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * @self: String filter
34e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * @str: target string
35e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng *
36e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * Compare @str and @self. Return true if the str match the rule
37e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng */
38e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengbool strfilter__compare(struct strfilter *self, const char *str);
39e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
40e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng/**
41e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * strfilter__delete - delete a string filter
42e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * @self: String filter to delete
43e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng *
44e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * Delete @self.
45e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng */
46e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengvoid strfilter__delete(struct strfilter *self);
47e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
48e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#endif
49