diff options
Diffstat (limited to 'src/experimental/regex.cpp')
-rw-r--r-- | src/experimental/regex.cpp | 94 |
1 files changed, 47 insertions, 47 deletions
diff --git a/src/experimental/regex.cpp b/src/experimental/regex.cpp index de24935..dbe0e85 100644 --- a/src/experimental/regex.cpp +++ b/src/experimental/regex.cpp | |||
@@ -13,83 +13,83 @@ | |||
13 | #define aSubStr ((regmatch_t *)paSubStr) | 13 | #define aSubStr ((regmatch_t *)paSubStr) |
14 | 14 | ||
15 | Bu::RegEx::RegEx() : | 15 | Bu::RegEx::RegEx() : |
16 | pRegEx( NULL ), | 16 | pRegEx( NULL ), |
17 | bCompiled( false ), | 17 | bCompiled( false ), |
18 | paSubStr( NULL ) | 18 | paSubStr( NULL ) |
19 | { | 19 | { |
20 | } | 20 | } |
21 | 21 | ||
22 | Bu::RegEx::RegEx( const Bu::String &sSrc ) : | 22 | Bu::RegEx::RegEx( const Bu::String &sSrc ) : |
23 | pRegEx( NULL ), | 23 | pRegEx( NULL ), |
24 | bCompiled( false ), | 24 | bCompiled( false ), |
25 | paSubStr( NULL ) | 25 | paSubStr( NULL ) |
26 | { | 26 | { |
27 | compile( sSrc ); | 27 | compile( sSrc ); |
28 | } | 28 | } |
29 | 29 | ||
30 | Bu::RegEx::~RegEx() | 30 | Bu::RegEx::~RegEx() |
31 | { | 31 | { |
32 | if( bCompiled ) | 32 | if( bCompiled ) |
33 | { | 33 | { |
34 | regfree( re ); | 34 | regfree( re ); |
35 | delete re; | 35 | delete re; |
36 | delete[] aSubStr; | 36 | delete[] aSubStr; |
37 | } | 37 | } |
38 | } | 38 | } |
39 | 39 | ||
40 | void Bu::RegEx::compile( const Bu::String &sSrc ) | 40 | void Bu::RegEx::compile( const Bu::String &sSrc ) |
41 | { | 41 | { |
42 | if( bCompiled ) | 42 | if( bCompiled ) |
43 | { | 43 | { |
44 | regfree( re ); | 44 | regfree( re ); |
45 | delete re; | 45 | delete re; |
46 | delete[] aSubStr; | 46 | delete[] aSubStr; |
47 | bCompiled = false; | 47 | bCompiled = false; |
48 | } | 48 | } |
49 | pRegEx = (void *)(new regex_t); | 49 | pRegEx = (void *)(new regex_t); |
50 | 50 | ||
51 | int nErr = regcomp( re, sSrc.getStr(), REG_EXTENDED|REG_NEWLINE ); | 51 | int nErr = regcomp( re, sSrc.getStr(), REG_EXTENDED|REG_NEWLINE ); |
52 | if( nErr ) | 52 | if( nErr ) |
53 | { | 53 | { |
54 | size_t length = regerror( nErr, re, NULL, 0 ); | 54 | size_t length = regerror( nErr, re, NULL, 0 ); |
55 | char *buffer = new char[length]; | 55 | char *buffer = new char[length]; |
56 | (void) regerror( nErr, re, buffer, length ); | 56 | (void) regerror( nErr, re, buffer, length ); |
57 | Bu::String s( buffer ); | 57 | Bu::String s( buffer ); |
58 | delete[] buffer; | 58 | delete[] buffer; |
59 | throw "???"; // BuildException( s.getStr() ); | 59 | throw "???"; // BuildException( s.getStr() ); |
60 | } | 60 | } |
61 | bCompiled = true; | 61 | bCompiled = true; |
62 | this->sSrc = sSrc; | 62 | this->sSrc = sSrc; |
63 | 63 | ||
64 | nSubStr = re->re_nsub+1; | 64 | nSubStr = re->re_nsub+1; |
65 | paSubStr = (void *)(new regmatch_t[nSubStr]); | 65 | paSubStr = (void *)(new regmatch_t[nSubStr]); |
66 | } | 66 | } |
67 | 67 | ||
68 | int Bu::RegEx::getNumSubStrings() | 68 | int Bu::RegEx::getNumSubStrings() |
69 | { | 69 | { |
70 | return nSubStr; | 70 | return nSubStr; |
71 | } | 71 | } |
72 | 72 | ||
73 | bool Bu::RegEx::execute( const Bu::String &sSrc ) | 73 | bool Bu::RegEx::execute( const Bu::String &sSrc ) |
74 | { | 74 | { |
75 | sTest = sSrc; | 75 | sTest = sSrc; |
76 | if( regexec( re, sSrc.getStr(), nSubStr, aSubStr, 0 ) ) | 76 | if( regexec( re, sSrc.getStr(), nSubStr, aSubStr, 0 ) ) |
77 | return false; | 77 | return false; |
78 | return true; | 78 | return true; |
79 | } | 79 | } |
80 | 80 | ||
81 | void Bu::RegEx::getSubStringRange( int nIndex, int &iStart, int &iEnd ) | 81 | void Bu::RegEx::getSubStringRange( int nIndex, int &iStart, int &iEnd ) |
82 | { | 82 | { |
83 | iStart = aSubStr[nIndex].rm_so; | 83 | iStart = aSubStr[nIndex].rm_so; |
84 | iEnd = aSubStr[nIndex].rm_eo; | 84 | iEnd = aSubStr[nIndex].rm_eo; |
85 | } | 85 | } |
86 | 86 | ||
87 | Bu::String Bu::RegEx::getSubString( int nIndex ) | 87 | Bu::String Bu::RegEx::getSubString( int nIndex ) |
88 | { | 88 | { |
89 | // regmatch_t *Subs = aSubStr; | 89 | // regmatch_t *Subs = aSubStr; |
90 | return Bu::String( | 90 | return Bu::String( |
91 | sTest.getStr()+aSubStr[nIndex].rm_so, | 91 | sTest.getStr()+aSubStr[nIndex].rm_so, |
92 | aSubStr[nIndex].rm_eo - aSubStr[nIndex].rm_so | 92 | aSubStr[nIndex].rm_eo - aSubStr[nIndex].rm_so |
93 | ); | 93 | ); |
94 | } | 94 | } |
95 | 95 | ||