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 114 by Douglas Thrift, 2004-03-16T14:33:08-08:00 vs.
Revision 115 by Douglas Thrift, 2004-03-16T22:53:38-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 <        //
18 >        if (this->expression != NULL)
19 >        {
20 >                pcre_free(this->expression);
21 >        }
22   }
23  
24   bool Matcher::match(const string& stuff)
25   {
26 <        //
26 >        substrings.clear();
27 >        
28 >        if (this->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 <        this->expression = pcre_compile(expression.c_str(), 0, NULL, NULL, NULL);
63 >        substrings.clear();
64 >        
65 >        if (this->expression != NULL)
66 >        {
67 >                pcre_free(this->expression);
68 >        }
69 >
70 >        this->expression = pcre_compile(expression.c_str(), PCRE_MULTILINE, NULL,
71 >                NULL, NULL);
72  
73          return *this;
74   }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines