ViewVC Help
View File | Revision Log | Show Annotations | Download File | View Changeset | Root Listing
root/repos/SiteMapperOld/Matcher.cpp
Revision: 126
Committed: 2004-03-23T19:48:15-08:00 (21 years, 3 months ago) by Douglas Thrift
Original Path: SiteMapper/Matcher.cpp
File size: 1265 byte(s)
Log Message:
Fancy!

File Contents

# Content
1 // Site Mapper
2 //
3 // Douglas Thrift
4 //
5 // $Id$
6
7 #include "Matcher.hpp"
8
9 Matcher::Matcher(const string& expression)
10 {
11 this->expression = NULL;
12
13 (*this)(expression);
14 }
15
16 Matcher::~Matcher()
17 {
18 if (expression != NULL)
19 {
20 pcre_free(expression);
21 }
22 }
23
24 bool Matcher::match(const string& stuff)
25 {
26 substrings.clear();
27
28 if (expression != NULL)
29 {
30 int length;
31
32 pcre_fullinfo(expression, NULL, PCRE_INFO_CAPTURECOUNT, &length);
33
34 int* substrings = new int[(++length *= 3)];
35 int count = pcre_exec(expression, NULL, stuff.c_str(), stuff.length(),
36 0, 0, substrings, length);
37
38 if (count > 0)
39 {
40 char* substring = new char[stuff.length() + 1];
41
42 for (int index = 0; index < count; index++)
43 {
44 pcre_copy_substring(stuff.c_str(), substrings, count, index,
45 substring, stuff.length() + 1);
46
47 this->substrings.push_back(substring);
48 }
49
50 delete [] substring;
51 delete [] substrings;
52 return true;
53 }
54
55 delete [] substrings;
56 }
57
58 return false;
59 }
60
61 Matcher& Matcher::operator()(const string& expression)
62 {
63 substrings.clear();
64
65 if (this->expression != NULL)
66 {
67 pcre_free(this->expression);
68 }
69
70 const char* error;
71 int offset;
72
73 this->expression = pcre_compile(expression.c_str(), PCRE_MULTILINE, &error,
74 &offset, NULL);
75
76 return *this;
77 }