/* * * 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 #include #include // // 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::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 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