18cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd/**
28cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * @file string_filter.h
38cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * Filter strings based on exclude/include list
48cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd *
58cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * @remark Copyright 2002 OProfile authors
68cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * @remark Read the file COPYING
78cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd *
88cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * @author Philippe Elie
98cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * @author John Levon
108cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd */
118cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
128cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#ifndef STRING_FILTER_H
138cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#define STRING_FILTER_H
148cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
158cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#include <string>
168cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#include <vector>
178cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
188cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd/**
198cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * string_filter - filtering of a string based on include/exclude list
208cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd *
218cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * This class is an oracle on whether a particular string matches
228cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * the given list of included and excluded strings.
238cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd *
248cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * This base class gives a default exact-match semantics.
258cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd */
268cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddclass string_filter {
278cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddpublic:
288cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	string_filter() {}
298cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
308cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	/**
318cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	 * Initialise the filter with the include and exclude list,
328cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	 * comma-separated.
338cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	 */
348cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	string_filter(std::string const & include_patterns,
358cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	              std::string const & exclude_patterns);
368cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
378cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	/**
388cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	 * Initialise the filter with the include and exclude list.
398cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	 */
408cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	string_filter(std::vector<std::string> const & include_patterns,
418cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	              std::vector<std::string> const & exclude_patterns);
428cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
438cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	virtual ~string_filter() {}
448cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
458cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	/// Returns true if the given string matches
468cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	virtual bool match(std::string const & str) const;
478cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
488cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddprotected:
498cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	/// include patterns
508cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	std::vector<std::string> include;
518cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	/// exclude patterns
528cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	std::vector<std::string> exclude;
538cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd};
548cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
558cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#endif /* STRING_FILTER_H */
56