/////////////////////////////////////////////////////////////// // Copyright 2015 John Maddock. Distributed under the Boost // Software License, Version 1.0. (See accompanying file // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_ // #ifdef TEST_RE2 #include "performance.hpp" #include #include using namespace re2; struct re2_regex : public abstract_regex { private: boost::scoped_ptr pat; public: re2_regex() {} ~re2_regex(){} virtual bool set_expression(const char* pp, bool isperl) { if(!isperl) return false; std::string s("(?m)"); s += pp; pat.reset(new RE2(s)); return pat->ok(); } virtual bool match_test(const char* text); virtual unsigned find_all(const char* text); virtual std::string name(); struct initializer { initializer() { re2_regex::register_instance(boost::shared_ptr(new re2_regex)); } void do_nothing()const {} }; static const initializer init; }; const re2_regex::initializer re2_regex::init; bool re2_regex::match_test(const char * text) { return RE2::FullMatch(text, *pat); } unsigned re2_regex::find_all(const char * text) { unsigned count = 0; StringPiece input(text); while(RE2::FindAndConsume(&input, *pat)) { ++count; } return count; } std::string re2_regex::name() { init.do_nothing(); return "RE2"; } #endif