// This may look like C code, but it is really -*- C++ -*- // ------------------------------------------------------------------ // The Goldware Library // Copyright (C) 1990-1999 Odinn Sorensen // ------------------------------------------------------------------ // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Library General Public // License as published by the Free Software Foundation; either // version 2 of the License, or (at your option) any later version. // // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // Library General Public License for more details. // // You should have received a copy of the GNU Library General Public // License along with this program; if not, write to the Free // Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, // MA 02111-1307, USA // ------------------------------------------------------------------ // $Id$ // ------------------------------------------------------------------ // Regular expressions C++ wrapper class. // ------------------------------------------------------------------ #include #include #include #include // ------------------------------------------------------------------ gregex::gregex() { preg = NULL; } // ------------------------------------------------------------------ gregex::~gregex() { reset(); } // ------------------------------------------------------------------ void gregex::reset() { if(preg) { regfree(preg); throw_delete(preg); } } // ------------------------------------------------------------------ bool gregex::compile(const char* pattern, int cflags) { int cflgs = REG_NOSUB; if(cflags & extended) cflgs |= REG_EXTENDED; if(cflags & icase) cflgs |= REG_ICASE; if(cflags & newline) cflgs |= REG_NEWLINE; if(not preg) { preg = new regex_t; throw_new(preg); } return make_bool(regcomp(preg, pattern, cflgs)); } // ------------------------------------------------------------------ bool gregex::match(const char* str, int eflags) { int eflgs = 0; if(eflags & notbol) eflgs |= REG_NOTBOL; if(eflags & noteol) eflgs |= REG_NOTEOL; return not regexec(preg, str, 0, NULL, eflgs); } // ------------------------------------------------------------------