ViewVC Help
View File | Revision Log | Show Annotations | Download File | View Changeset | Root Listing
root/repos/Bender/Matcher.cpp
(Generate patch)

Comparing Bender/Matcher.cpp (file contents):
Revision 113 by Douglas Thrift, 2004-03-16T12:31:22-08:00 vs.
Revision 119 by Douglas Thrift, 2004-03-17T21:15:24-08:00

# Line 6 | Line 6
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 <        //
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 + }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines