diff --git a/experimental/bench_segmented_algos.cpp b/experimental/bench_segmented_algos.cpp index d49ac12..b1bfc07 100644 --- a/experimental/bench_segmented_algos.cpp +++ b/experimental/bench_segmented_algos.cpp @@ -1238,19 +1238,17 @@ struct seg_reverse { }; // --- reverse_copy --- -template +template struct std_reverse_copy { - typedef typename C::value_type VT; - const C &c; boost::container::vector &out; - std_reverse_copy(const C &c_, boost::container::vector &o_) : c(c_), out(o_) {} + const C &c; OutT &out; + std_reverse_copy(const C &c_, OutT &o_) : c(c_), out(o_) {} BOOST_CONTAINER_FORCEINLINE void operator()() { clobber(); std::reverse_copy(c.begin(), c.end(), out.begin()); escape(&out[0]); } }; -template +template struct seg_reverse_copy { - typedef typename C::value_type VT; - const C &c; boost::container::vector &out; - seg_reverse_copy(const C &c_, boost::container::vector &o_) : c(c_), out(o_) {} + const C &c; OutT &out; + seg_reverse_copy(const C &c_, OutT &o_) : c(c_), out(o_) {} BOOST_CONTAINER_FORCEINLINE void operator()() { clobber(); bc::segmented_reverse_copy(iter_w::wrap(c.begin()), iter_w::wrap(c.end()), iter_w::wrap(out.begin())); escape(&out[0]); } }; @@ -1938,15 +1936,16 @@ void bench_reverse(const C &c, std::size_t iters, const char* cname) bench_ops::seg_reverse(c2, result), "reverse", cname); } -template -void bench_reverse_copy(const C &c, std::size_t iters, const char* cname) +template +void bench_reverse_copy(const C &c, std::size_t iters, const char* cname, const char* label) { typedef typename C::value_type VT; - boost::container::vector out(c.size()); + typedef typename boost::move_detail::if_c >::type out_t; + out_t out(c.size()); compare_batch(iters, c.size(), - bench_ops::std_reverse_copy(c, out), - bench_ops::seg_reverse_copy(c, out), - bench_ops::seg_reverse_copy(c, out), "reverse_copy", cname); + bench_ops::std_reverse_copy(c, out), + bench_ops::seg_reverse_copy(c, out), + bench_ops::seg_reverse_copy(c, out), label, cname); } template @@ -2367,7 +2366,8 @@ void run_all(const C& c, std::size_t iters, const char* cname) bench_reverse(c, iters, cname); //reverse_copy - bench_reverse_copy(c, iters, cname); + bench_reverse_copy(c, iters, cname, "reverse_copy"); + bench_reverse_copy(c, iters, cname, "reverse_copy(2xS)"); //search { @@ -2424,7 +2424,7 @@ void run_benchmarks() //#define SIMPLE_TEST #if defined(NDEBUG) && !defined(SIMPLE_TEST) const std::size_t N = 100000; - const std::size_t iter = 4000; + const std::size_t iter = 2000; #else const std::size_t N = 10000; const std::size_t iter = 1;