1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- ///////////////////////////////////////////////////////////////
- // 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 <boost/scoped_ptr.hpp>
- #include <re2.h>
- using namespace re2;
- struct re2_regex : public abstract_regex
- {
- private:
- boost::scoped_ptr<RE2> 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<abstract_regex>(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
|