00001
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00033
00034 #ifndef GROOVX_TCL_REGEXP_CC_UTC20050628162420_DEFINED
00035 #define GROOVX_TCL_REGEXP_CC_UTC20050628162420_DEFINED
00036
00037 #include "tcl/regexp.h"
00038
00039 #include "rutz/error.h"
00040 #include "rutz/sfmt.h"
00041
00042 #include <tcl.h>
00043
00044 #include "rutz/trace.h"
00045 #include "rutz/debug.h"
00046 GVX_DBG_REGISTER
00047
00048 namespace
00049 {
00050 Tcl_RegExp get_checked_regexp(const tcl::obj& patrn)
00051 {
00052 const int flags = 0;
00053
00054 Tcl_RegExp regexp = Tcl_GetRegExpFromObj(0, patrn.get(), flags);
00055 if (!regexp)
00056 {
00057 throw rutz::error(rutz::sfmt("error getting a regexp from '%s'",
00058 Tcl_GetString(patrn.get())),
00059 SRC_POS);
00060 }
00061 return regexp;
00062 }
00063 }
00064
00065 bool tcl::regexp::matches_string(const char* str)
00066 {
00067 static const int REGEX_ERROR = -1;
00068 static const int REGEX_NO_MATCH = 0;
00069 static const int REGEX_FOUND_MATCH = 1;
00070
00071 Tcl_RegExp regexp = get_checked_regexp(m_pattern);
00072
00073
00074 int regex_result = Tcl_RegExpExec(0, regexp, str, str);
00075
00076 switch (regex_result)
00077 {
00078 case REGEX_ERROR:
00079 throw rutz::error("error executing regular expression", SRC_POS);
00080
00081 case REGEX_NO_MATCH:
00082 return false;
00083
00084 case REGEX_FOUND_MATCH:
00085 return true;
00086
00087 default:
00088 GVX_ASSERT(false);
00089 }
00090
00091 return false;
00092 }
00093
00094 static const char __attribute__((used)) vcid_groovx_tcl_regexp_cc_utc20050628162420[] = "$Id: regexp.cc 10065 2007-04-12 05:54:56Z rjpeters $ $HeadURL: file:
00095 #endif // !GROOVX_TCL_REGEXP_CC_UTC20050628162420_DEFINED