]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/regex/performance/xpressive.cpp
add subtree-ish sources for 12.0.3
[ceph.git] / ceph / src / boost / libs / regex / performance / xpressive.cpp
1 ///////////////////////////////////////////////////////////////
2 // Copyright 2015 John Maddock. Distributed under the Boost
3 // Software License, Version 1.0. (See accompanying file
4 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_
5 //
6
7 #include <boost/config.hpp>
8
9 #include "performance.hpp"
10 #include <boost/xpressive/xpressive.hpp>
11
12 using namespace boost::xpressive;
13
14 struct xpressive_regex : public abstract_regex
15 {
16 private:
17 cregex e;
18 cmatch what;
19 public:
20 virtual bool set_expression(const char* pe, bool isperl)
21 {
22 if(!isperl)
23 return false;
24 try
25 {
26 e = cregex::compile(pe, regex_constants::ECMAScript);
27 }
28 catch(const std::exception&)
29 {
30 return false;
31 }
32 return true;
33 }
34 virtual bool match_test(const char* text);
35 virtual unsigned find_all(const char* text);
36 virtual std::string name();
37
38 struct initializer
39 {
40 initializer()
41 {
42 xpressive_regex::register_instance(boost::shared_ptr<abstract_regex>(new xpressive_regex));
43 }
44 void do_nothing()const {}
45 };
46 static const initializer init;
47 };
48
49 const xpressive_regex::initializer xpressive_regex::init;
50
51
52 bool xpressive_regex::match_test(const char * text)
53 {
54 return regex_match(text, what, e);
55 }
56
57 unsigned xpressive_regex::find_all(const char * text)
58 {
59 cregex_token_iterator i(text, text + std::strlen(text), e), j;
60 unsigned count = 0;
61 while(i != j)
62 {
63 ++i;
64 ++count;
65 }
66 return count;
67 }
68
69 std::string xpressive_regex::name()
70 {
71 init.do_nothing();
72 return "boost::xpressive::cregex";
73 }
74