#ifndef QPID_SYS_REGEX_H #define QPID_SYS_REGEX_H /* * * Copyright (c) 2006 The Apache Software Foundation * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * */ #if defined(_POSIX_SOURCE) || defined(__unix__) # include # include # include #elif defined(_MSC_VER) # include #else #error "No known regex implementation" #endif // This is a very simple wrapper for Basic Regular Expression facilities either // provided by POSIX or C++ tr1 // // Matching expressions are not supported and so the only useful operation is // a simple boolean match indicator. namespace qpid { namespace sys { #if defined(_POSIX_SOURCE) || defined(__unix__) class regex { ::regex_t re; public: regex(const std::string& s) { int rc = ::regcomp(&re, s.c_str(), REG_NOSUB); if (rc != 0) throw std::logic_error("Regular expression compilation error"); } ~regex() { ::regfree(&re); } friend bool regex_match(const std::string& s, const regex& re); }; inline bool regex_match(const std::string& s, const regex& re) { return ::regexec(&(re.re), s.c_str(), 0, 0, 0)==0; } #elif defined(_MSC_VER) class regex : public std::tr1::regex { public: regex(const std::string& s) : std::tr1::regex(s, std::tr1::regex::basic) {} }; using std::tr1::regex_match; #else #error "No known regex implementation" #endif }} #endif