]>
git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/xpressive/perf/time_static_xpressive.cpp
6 * Use, modification and distribution are subject to the
7 * Boost Software License, Version 1.0. (See accompanying file
8 * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
12 #include "./regex_comparison.hpp"
15 #include <boost/timer.hpp>
16 #include <boost/xpressive/xpressive.hpp>
21 using namespace boost::xpressive
;
24 char const * sz1
= "^([0-9]+)(\\-| |$)(.*)$";
25 sregex rx1
= bol
>> (s1
= +range('0','9')) >> (s2
= as_xpr('-')|' '|eol
) >> (s3
= *_
) >> eol
;
27 char const * sz2
= "([[:digit:]]{4}[- ]){3}[[:digit:]]{3,4}";
28 sregex rx2
= bol
>> repeat
<3>(s1
= repeat
<4>(set
[digit
]) >> (set
='-',' ')) >> repeat
<3,4>(set
[digit
]);
30 char const * sz3
= "^([a-zA-Z0-9_\\-\\.]+)@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.)|(([a-zA-Z0-9\\-]+\\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\\]?)$";
33 >> (s1
= +set
[ range('a','z') | range('A','Z') | range('0','9') | '_' | '-' | '.' ])
36 (s3
= '[' >> repeat
<1,3>(range('0','9')) >> '.' >> repeat
<1,3>(range('0','9'))
37 >> '.' >> repeat
<1,3>(range('0','9')) >> '.'
40 (s4
= +(s5
= +set
[ range('a','z') | range('A','Z') | range('0','9') | '-' ] >> '.' ) )
42 >> (s6
= repeat
<2,4>(set
[ range('a','z') | range('A','Z')]) | repeat
<1,3>(range('0','9')))
47 char const * sz4
= "^([a-zA-Z0-9_\\-\\.]+)@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.)|(([a-zA-Z0-9\\-]+\\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\\]?)$";
50 char const * sz5
= "^([a-zA-Z0-9_\\-\\.]+)@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.)|(([a-zA-Z0-9\\-]+\\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\\]?)$";
53 char const * sz6
= "^[a-zA-Z]{1,2}[0-9][0-9A-Za-z]{0,1} {0,1}[0-9][A-Za-z]{2}$";
54 sregex rx6
= bol
>> repeat
<1,2>(set
[ range('a','z') | range('A','Z') ])
55 >> range('0','9') >> repeat
<0,1>(set
[range('0','9')|range('A','Z')|range('a','z')])
56 >> repeat
<0,1>(as_xpr(' ')) >> range('0','9')
57 >> repeat
<2>(set
[range('A','Z')|range('a','z')]) >> eol
;
59 char const * sz7
= "^[a-zA-Z]{1,2}[0-9][0-9A-Za-z]{0,1} {0,1}[0-9][A-Za-z]{2}$";
62 char const * sz8
= "^[a-zA-Z]{1,2}[0-9][0-9A-Za-z]{0,1} {0,1}[0-9][A-Za-z]{2}$";
65 char const * sz9
= "^[[:digit:]]{1,2}/[[:digit:]]{1,2}/[[:digit:]]{4}$";
66 sregex rx9
= bol
>> repeat
<1,2>(set
[digit
]) >> '/' >> repeat
<1,2>(set
[digit
]) >> '/' >> repeat
<4>(set
[digit
]) >> eol
;
68 char const * sz10
= "^[[:digit:]]{1,2}/[[:digit:]]{1,2}/[[:digit:]]{4}$";
71 char const * sz11
= "^[-+]?[[:digit:]]*\\.?[[:digit:]]*$";
72 sregex rx11
= bol
>> !(set
= '-','+') >> *set
[digit
] >> !as_xpr('.') >> *set
[digit
] >> eol
;
74 char const * sz12
= "^[-+]?[[:digit:]]*\\.?[[:digit:]]*$";
77 char const * sz13
= "^[-+]?[[:digit:]]*\\.?[[:digit:]]*$";
81 char const * sz14
= "Twain";
82 boost::xpressive::sregex rx14
= as_xpr("Twain");
84 char const * sz15
= "Huck[[:alpha:]]+";
85 boost::xpressive::sregex rx15
= "Huck" >> +set
[alpha
];
87 char const * sz16
= "[[:alpha:]]+ing";
88 boost::xpressive::sregex rx16
= +set
[alpha
] >> "ing";
90 char const * sz17
= "^[^\n]*?Twain";
91 boost::xpressive::sregex rx17
= bol
>> -*~as_xpr('\n') >> "Twain";
93 char const * sz18
= "Tom|Sawyer|Huckleberry|Finn";
94 boost::xpressive::sregex rx18
= ( as_xpr("Tom") | "Sawyer" | "Huckleberry" | "Finn" );
96 //char const * sz18 = "Tom|Sawyer|.uckleberry|Finn";
97 //boost::xpressive::sregex rx18 = ( as_xpr("Tom") | "Sawyer" | _ >> "uckleberry" | "Finn" );
99 char const * sz19
= "(Tom|Sawyer|Huckleberry|Finn).{0,30}river|river.{0,30}(Tom|Sawyer|Huckleberry|Finn)";
100 boost::xpressive::sregex rx19
=
101 (s1
= as_xpr("Tom") | "Sawyer" | "Huckleberry" | "Finn" )
107 >> (s2
= as_xpr("Tom") | "Sawyer" | "Huckleberry" | "Finn" );
109 std::map
< std::string
, sregex
> rxmap
;
124 rxmap
[ sz10
] = rx10
;
125 rxmap
[ sz11
] = rx11
;
126 rxmap
[ sz12
] = rx12
;
127 rxmap
[ sz13
] = rx13
;
128 rxmap
[ sz14
] = rx14
;
129 rxmap
[ sz15
] = rx15
;
130 rxmap
[ sz16
] = rx16
;
131 rxmap
[ sz17
] = rx17
;
132 rxmap
[ sz18
] = rx18
;
133 rxmap
[ sz19
] = rx19
;
137 static map_init
const i
= map_init();
139 double time_match(const std::string
& re
, const std::string
& text
)
141 boost::xpressive::sregex
const &e
= rxmap
[ re
];
142 boost::xpressive::smatch what
;
145 int counter
, repeats
;
148 assert(boost::xpressive::regex_match( text
, what
, e
));
152 for(counter
= 0; counter
< iter
; ++counter
)
154 boost::xpressive::regex_match( text
, what
, e
);
156 result
= tim
.elapsed();
158 } while(result
< 0.5);
161 // repeat test and report least value for consistency:
162 for(repeats
= 0; repeats
< REPEAT_COUNT
; ++repeats
)
165 for(counter
= 0; counter
< iter
; ++counter
)
167 boost::xpressive::regex_match( text
, what
, e
);
170 result
= (std::min
)(run
, result
);
172 return result
/ iter
;
177 void operator()( boost::xpressive::smatch
const & ) const
182 double time_find_all(const std::string
& re
, const std::string
& text
)
184 boost::xpressive::sregex
const &e
= rxmap
[ re
];
185 boost::xpressive::smatch what
;
188 int counter
, repeats
;
194 for(counter
= 0; counter
< iter
; ++counter
)
196 boost::xpressive::sregex_iterator
begin( text
.begin(), text
.end(), e
), end
;
197 std::for_each( begin
, end
, noop() );
199 result
= tim
.elapsed();
201 }while(result
< 0.5);
205 return result
/ iter
;
207 // repeat test and report least value for consistency:
208 for(repeats
= 0; repeats
< REPEAT_COUNT
; ++repeats
)
211 for(counter
= 0; counter
< iter
; ++counter
)
213 boost::xpressive::sregex_iterator
begin( text
.begin(), text
.end(), e
), end
;
214 std::for_each( begin
, end
, noop() );
217 result
= (std::min
)(run
, result
);
219 return result
/ iter
;