glob_filter.cpp revision 8cfa702f803c5ef6a2b062a489a1b2cf66b45b5e
18cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd/**
28cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * @file glob_filter.cpp
38cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * Filter strings based on globbed 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#include <fnmatch.h>
138cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
148cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#include <algorithm>
158cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
168cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#include "glob_filter.h"
178cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#include "string_manip.h"
188cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
198cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddusing namespace std;
208cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
218cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddbool glob_filter::fnmatcher::operator()(string const & s)
228cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd{
238cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	return fnmatch(s.c_str(), str_.c_str(), 0) != FNM_NOMATCH;
248cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd}
258cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
268cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
278cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddbool glob_filter::match(string const & str) const
288cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd{
298cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	vector<string>::const_iterator cit;
308cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	cit = find_if(exclude.begin(), exclude.end(), fnmatcher(str));
318cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	if (cit != exclude.end())
328cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd		return false;
338cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
348cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	cit = find_if(include.begin(), include.end(), fnmatcher(str));
358cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	if (include.empty() || cit != include.end())
368cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd		return true;
378cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
388cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	return false;
398cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd}
40