blob: fe611f3c9e3965007a7ea5ed9f3fbbc768b5f271 [file] [log] [blame]
Masami Hiramatsu68baa432011-01-20 23:15:30 +09001#ifndef __PERF_STRFILTER_H
2#define __PERF_STRFILTER_H
3/* General purpose glob matching filter */
4
5#include <linux/list.h>
6#include <stdbool.h>
7
8/* A node of string filter */
9struct strfilter_node {
10 struct strfilter_node *l; /* Tree left branche (for &,|) */
11 struct strfilter_node *r; /* Tree right branche (for !,&,|) */
12 const char *p; /* Operator or rule */
13};
14
15/* String filter */
16struct strfilter {
17 struct strfilter_node *root;
18};
19
20/**
21 * strfilter__new - Create a new string filter
22 * @rules: Filter rule, which is a combination of glob expressions.
23 * @err: Pointer which points an error detected on @rules
24 *
25 * Parse @rules and return new strfilter. Return NULL if an error detected.
26 * In that case, *@err will indicate where it is detected, and *@err is NULL
27 * if a memory allocation is failed.
28 */
29struct strfilter *strfilter__new(const char *rules, const char **err);
30
31/**
32 * strfilter__compare - compare given string and a string filter
Arnaldo Carvalho de Melo316c7132013-11-05 15:32:36 -030033 * @filter: String filter
Masami Hiramatsu68baa432011-01-20 23:15:30 +090034 * @str: target string
35 *
Arnaldo Carvalho de Melo316c7132013-11-05 15:32:36 -030036 * Compare @str and @filter. Return true if the str match the rule
Masami Hiramatsu68baa432011-01-20 23:15:30 +090037 */
Arnaldo Carvalho de Melo316c7132013-11-05 15:32:36 -030038bool strfilter__compare(struct strfilter *filter, const char *str);
Masami Hiramatsu68baa432011-01-20 23:15:30 +090039
40/**
41 * strfilter__delete - delete a string filter
Arnaldo Carvalho de Melo316c7132013-11-05 15:32:36 -030042 * @filter: String filter to delete
Masami Hiramatsu68baa432011-01-20 23:15:30 +090043 *
Arnaldo Carvalho de Melo316c7132013-11-05 15:32:36 -030044 * Delete @filter.
Masami Hiramatsu68baa432011-01-20 23:15:30 +090045 */
Arnaldo Carvalho de Melo316c7132013-11-05 15:32:36 -030046void strfilter__delete(struct strfilter *filter);
Masami Hiramatsu68baa432011-01-20 23:15:30 +090047
48#endif