ViewVC Help
View File | Revision Log | Show Annotations | Download File | View Changeset | Root Listing
root/zoe/trunk/Matcher.cpp
Revision: 7
Committed: 2004-07-09T17:12:54-07:00 (20 years, 11 months ago) by douglas
File size: 1295 byte(s)
Log Message:
Cheese is good.

File Contents

# User Rev Content
1 douglas 6 // Zoe AIM Away Message RSS Feed Generator
2 douglas 5 //
3     // Douglas Thrift
4     //
5     // $Id$
6    
7     #include "Matcher.hpp"
8    
9 douglas 7 Matcher::Matcher(const ext::String& expression)
10 douglas 5 {
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 douglas 7 bool Matcher::match(const ext::String& stuff)
25 douglas 5 {
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 douglas 7 Matcher& Matcher::operator()(const ext::String& expression)
62 douglas 5 {
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(), 0, &error,
74     &offset, NULL);
75    
76     return *this;
77     }

Properties

Name Value
svn:eol-style native
svn:keywords Id