X-Git-Url: https://git.saurik.com/cydia.git/blobdiff_plain/d458596e0138c5094097a45442828cbc087be403..refs/heads/simpler-sections:/CyteKit/PerlCompatibleRegEx.hpp diff --git a/CyteKit/PerlCompatibleRegEx.hpp b/CyteKit/PerlCompatibleRegEx.hpp index cbbe068a..602f446c 100644 --- a/CyteKit/PerlCompatibleRegEx.hpp +++ b/CyteKit/PerlCompatibleRegEx.hpp @@ -42,6 +42,7 @@ #include +#include "CyteKit/UCPlatform.h" #include "CyteKit/stringWithUTF8Bytes.h" class Pcre { @@ -55,15 +56,20 @@ class Pcre { public: Pcre() : code_(NULL), - study_(NULL) + study_(NULL), + data_(NULL) { } - Pcre(const char *regex) : + Pcre(const char *regex, NSString *data = nil) : code_(NULL), - study_(NULL) + study_(NULL), + data_(NULL) { this->operator =(regex); + + if (data != nil) + this->operator ()(data); } void operator =(const char *regex) { @@ -79,6 +85,7 @@ class Pcre { } pcre_fullinfo(code_, study_, PCRE_INFO_CAPTURECOUNT, &capture_); + _assert(capture_ >= 0); matches_ = new int[(capture_ + 1) * 3]; } @@ -101,8 +108,17 @@ class Pcre { } bool operator ()(const char *data, size_t size) { - data_ = data; - return pcre_exec(code_, study_, data, size, 0, 0, matches_, (capture_ + 1) * 3) >= 0; + if (pcre_exec(code_, study_, data, size, 0, 0, matches_, (capture_ + 1) * 3) >= 0) { + data_ = data; + return true; + } else { + data_ = NULL; + return false; + } + } + + operator bool() const { + return data_ != NULL; } NSString *operator ->*(NSString *format) const {