Sophie

Sophie

distrib > Mageia > 5 > i586 > by-pkgid > dc51b8a2b4c20bd1ac1b9c8f81249719 > files > 2979

boost-examples-1.55.0-8.mga5.noarch.rpm

/*
 *
 * 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_localised_boost;
extern bool time_greta;
extern bool time_safe_greta;
extern bool time_posix;
extern bool time_pcre;
extern bool time_xpressive;
extern bool time_std;

extern bool test_matches;
extern bool test_short_twain;
extern bool test_long_twain;
extern bool test_code;
extern bool test_html;

extern std::string html_template_file;
extern std::string html_out_file;
extern std::string html_contents;


int handle_argument(const std::string& what);
int show_usage();
void load_file(std::string& text, const char* file);
void output_html_results(bool show_description, const std::string& tagname);
void output_final_html();


struct results
{
   double boost_time;
   double localised_boost_time;
   double greta_time;
   double safe_greta_time;
   double posix_time;
   double pcre_time;
   double xpressive_time;
   double std_time;
   double factor;
   std::string expression;
   std::string description;
   results(const std::string& ex, const std::string& desc)
      : boost_time(-1),
        localised_boost_time(-1),
        greta_time(-1),
        safe_greta_time(-1),
        posix_time(-1),
        pcre_time(-1),
        xpressive_time(-1),
		std_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((localised_boost_time >= 0) && (localised_boost_time < factor))
         factor = localised_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((posix_time >= 0) && (posix_time < factor))
         factor = posix_time;
      if((pcre_time >= 0) && (pcre_time < factor))
         factor = pcre_time;
      if((xpressive_time >= 0) && (xpressive_time < factor))
         factor = xpressive_time;
      if((std_time >= 0) && (std_time < factor))
         factor = std_time;
   }
};

extern std::list<results> result_list;


namespace b {
// boost tests:
double time_match(const std::string& re, const std::string& text, bool icase);
double time_find_all(const std::string& re, const std::string& text, bool icase);

}
namespace bl {
// localised boost tests:
double time_match(const std::string& re, const std::string& text, bool icase);
double time_find_all(const std::string& re, const std::string& text, bool icase);

}
namespace pcr {
// pcre tests:
double time_match(const std::string& re, const std::string& text, bool icase);
double time_find_all(const std::string& re, const std::string& text, bool icase);

}
namespace g {
// greta tests:
double time_match(const std::string& re, const std::string& text, bool icase);
double time_find_all(const std::string& re, const std::string& text, bool icase);

}
namespace gs {
// safe greta tests:
double time_match(const std::string& re, const std::string& text, bool icase);
double time_find_all(const std::string& re, const std::string& text, bool icase);

}
namespace posix {
// safe greta tests:
double time_match(const std::string& re, const std::string& text, bool icase);
double time_find_all(const std::string& re, const std::string& text, bool icase);

}
namespace dxpr {
// xpressive tests:
double time_match(const std::string& re, const std::string& text, bool icase);
double time_find_all(const std::string& re, const std::string& text, bool icase);
}
namespace stdr {
// xpressive tests:
double time_match(const std::string& re, const std::string& text, bool icase);
double time_find_all(const std::string& re, const std::string& text, bool icase);
}

void test_match(const std::string& re, const std::string& text, const std::string& description, bool icase = false);
void test_find_all(const std::string& re, const std::string& text, const std::string& description, bool icase = false);
inline void test_match(const std::string& re, const std::string& text, bool icase = false)
{ test_match(re, text, text, icase); }
inline void test_find_all(const std::string& re, const std::string& text, bool icase = false)
{ test_find_all(re, text, "", icase); }


#define REPEAT_COUNT 10

#endif