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