140 lines
4.0 KiB
C++
140 lines
4.0 KiB
C++
/*
|
|
*
|
|
* Copyright (c) 2002
|
|
* John Maddock
|
|
*
|
|
* Use, modification and distribution are subject to the
|
|
* Boost Software License, Version 1.0. (See accompanying file
|
|
* LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
|
*
|
|
*/
|
|
|
|
|
|
#ifndef REGEX_COMPARISON_HPP
|
|
#define REGEX_COMPARISON_HPP
|
|
|
|
#include <string>
|
|
#include <list>
|
|
#include <boost/limits.hpp>
|
|
|
|
//
|
|
// globals:
|
|
//
|
|
extern bool time_boost;
|
|
extern bool time_greta;
|
|
extern bool time_safe_greta;
|
|
extern bool time_dynamic_xpressive;
|
|
extern bool time_static_xpressive;
|
|
//extern bool time_posix;
|
|
//extern bool time_pcre;
|
|
|
|
extern bool test_matches;
|
|
extern bool test_short_twain;
|
|
extern bool test_long_twain;
|
|
|
|
extern std::string xml_out_file;
|
|
extern std::string xml_contents;
|
|
|
|
|
|
int handle_argument(const std::string& what);
|
|
int show_usage();
|
|
void load_file(std::string& text, const char* file);
|
|
void output_xml_results(bool show_description, const std::string& title, const std::string& filename);
|
|
|
|
struct results
|
|
{
|
|
double boost_time;
|
|
double greta_time;
|
|
double safe_greta_time;
|
|
double dynamic_xpressive_time;
|
|
double static_xpressive_time;
|
|
//double posix_time;
|
|
//double pcre_time;
|
|
double factor;
|
|
std::string expression;
|
|
std::string description;
|
|
results(const std::string& ex, const std::string& desc)
|
|
: boost_time(-1),
|
|
greta_time(-1),
|
|
safe_greta_time(-1),
|
|
dynamic_xpressive_time(-1),
|
|
static_xpressive_time(-1),
|
|
//posix_time(-1),
|
|
//pcre_time(-1),
|
|
factor((std::numeric_limits<double>::max)()),
|
|
expression(ex),
|
|
description(desc)
|
|
{}
|
|
void finalise()
|
|
{
|
|
if((boost_time >= 0) && (boost_time < factor))
|
|
factor = boost_time;
|
|
if((greta_time >= 0) && (greta_time < factor))
|
|
factor = greta_time;
|
|
if((safe_greta_time >= 0) && (safe_greta_time < factor))
|
|
factor = safe_greta_time;
|
|
if((dynamic_xpressive_time >= 0) && (dynamic_xpressive_time < factor))
|
|
factor = dynamic_xpressive_time;
|
|
if((static_xpressive_time >= 0) && (static_xpressive_time < factor))
|
|
factor = static_xpressive_time;
|
|
//if((posix_time >= 0) && (posix_time < factor))
|
|
// factor = posix_time;
|
|
//if((pcre_time >= 0) && (pcre_time < factor))
|
|
// factor = pcre_time;
|
|
if((factor >= 0) && (factor < factor))
|
|
factor = factor;
|
|
}
|
|
};
|
|
|
|
extern std::list<results> result_list;
|
|
|
|
|
|
namespace b {
|
|
// boost tests:
|
|
double time_match(const std::string& re, const std::string& text);
|
|
double time_find_all(const std::string& re, const std::string& text);
|
|
}
|
|
//namespace posix {
|
|
//// posix tests:
|
|
//double time_match(const std::string& re, const std::string& text);
|
|
//double time_find_all(const std::string& re, const std::string& text);
|
|
//
|
|
//}
|
|
//namespace pcr {
|
|
//// pcre tests:
|
|
//double time_match(const std::string& re, const std::string& text);
|
|
//double time_find_all(const std::string& re, const std::string& text);
|
|
//
|
|
//}
|
|
namespace g {
|
|
// greta tests:
|
|
double time_match(const std::string& re, const std::string& text);
|
|
double time_find_all(const std::string& re, const std::string& text);
|
|
}
|
|
namespace gs {
|
|
// safe greta tests:
|
|
double time_match(const std::string& re, const std::string& text);
|
|
double time_find_all(const std::string& re, const std::string& text);
|
|
}
|
|
namespace dxpr {
|
|
// dynamic xpressive tests:
|
|
double time_match(const std::string& re, const std::string& text);
|
|
double time_find_all(const std::string& re, const std::string& text);
|
|
}
|
|
namespace sxpr {
|
|
// static xpressive tests:
|
|
double time_match(const std::string& re, const std::string& text);
|
|
double time_find_all(const std::string& re, const std::string& text);
|
|
}
|
|
void test_match(const std::string& re, const std::string& text, const std::string& description);
|
|
void test_find_all(const std::string& re, const std::string& text, const std::string& description);
|
|
inline void test_match(const std::string& re, const std::string& text)
|
|
{ test_match(re, text, text); }
|
|
inline void test_find_all(const std::string& re, const std::string& text)
|
|
{ test_find_all(re, text, ""); }
|
|
|
|
|
|
#define REPEAT_COUNT 10
|
|
|
|
#endif
|