From: JINMEI Tatuya Date: Tue, 13 Mar 2012 07:01:53 +0000 (-0700) Subject: [1773new] [1773] initial fix for clang++/Lion build failure X-Git-Tag: trac2351_base~226^2~116^2~53^2~2 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=1c45a4e0bc84ab2d3e006ceb63ce18b9c32adf53;p=thirdparty%2Fkea.git [1773new] [1773] initial fix for clang++/Lion build failure --- diff --git a/src/lib/bench/benchmark.h b/src/lib/bench/benchmark.h index 7f77aa19ec..22ae7e70c7 100644 --- a/src/lib/bench/benchmark.h +++ b/src/lib/bench/benchmark.h @@ -17,6 +17,7 @@ #include +#include #include #include @@ -210,9 +211,9 @@ public: /// \param target The templated class object that /// implements the code to be benchmarked. BenchMark(const int iterations, T target) : - iterations_(iterations), sub_iterations_(0), target_(target) + iterations_(iterations), sub_iterations_(0) { - initialize(true); + initialize(target, true); } /// \brief Constructor for finer-grained control. @@ -230,9 +231,9 @@ public: /// \param immediate If \c true the benchmark will be performed within /// the constructor; otherwise it only does initialization. BenchMark(const int iterations, T& target, const bool immediate) : - iterations_(iterations), sub_iterations_(0), target_(target) + iterations_(iterations), sub_iterations_(0), target_(&target) { - initialize(immediate); + initialize(target, immediate); } //@} @@ -241,14 +242,14 @@ public: /// This method will be called from \c run() before starting the benchmark. /// By default it's empty, but can be customized via template /// specialization. - void setUp() {} + void setUp(T&) {} /// \brief Hook to be called after benchmark. /// /// This method will be called from \c run() when the benchmark completes. /// By default it's empty, but can be customized via template /// specialization. - void tearDown() {} + void tearDown(T&) {} /// \brief Perform benchmark. /// @@ -257,17 +258,8 @@ public: /// of times specified on construction, and records the time on completion. /// Finally, it calls \c tearDown(). void run() { - setUp(); - - struct timeval beg, end; - gettimeofday(&beg, NULL); - for (unsigned int i = 0; i < iterations_; ++i) { - sub_iterations_ += target_.run(); - } - gettimeofday(&end, NULL); - tv_diff_ = tv_subtract(end, beg); - - tearDown(); + assert(target_ != NULL); + run(*target_); } /// \brief Print the benchmark result. @@ -361,9 +353,23 @@ public: /// performed implicitly. static const int ITERATION_FAILURE = -1; private: - void initialize(const bool immediate) { + void run(T& target) { + setUp(target); + + struct timeval beg, end; + gettimeofday(&beg, NULL); + for (unsigned int i = 0; i < iterations_; ++i) { + sub_iterations_ += target.run(); + } + gettimeofday(&end, NULL); + tv_diff_ = tv_subtract(end, beg); + + tearDown(target); + } + + void initialize(T& target, const bool immediate) { if (immediate) { - run(); + run(target); printResult(); } } @@ -388,7 +394,7 @@ private: static const int ONE_MILLION = 1000000; const unsigned int iterations_; unsigned int sub_iterations_; - T& target_; + T* target_; struct timeval tv_diff_; }; diff --git a/src/lib/bench/example/search_bench.cc b/src/lib/bench/example/search_bench.cc index 851d815e88..84f95d953b 100644 --- a/src/lib/bench/example/search_bench.cc +++ b/src/lib/bench/example/search_bench.cc @@ -79,9 +79,9 @@ namespace isc { namespace bench { template<> void -BenchMark::setUp() { +BenchMark::setUp(SetSearchBenchMark& target) { cout << "Benchmark for searching std::set (size=" - << target_.data_.size() << ")" << endl; + << target.data_.size() << ")" << endl; } } } diff --git a/src/lib/bench/tests/benchmark_unittest.cc b/src/lib/bench/tests/benchmark_unittest.cc index 9b476cdffc..dfe7df9c75 100644 --- a/src/lib/bench/tests/benchmark_unittest.cc +++ b/src/lib/bench/tests/benchmark_unittest.cc @@ -46,14 +46,14 @@ namespace isc { namespace bench { template <> void -BenchMark::setUp() { - target_.setup_completed_ = true; +BenchMark::setUp(TestBenchMark& target) { + target.setup_completed_ = true; }; template <> void -BenchMark::tearDown() { - target_.teardown_completed_ = true; +BenchMark::tearDown(TestBenchMark& target) { + target.teardown_completed_ = true; }; // XXX: some compilers cannot find class static constants used in