diff options
Diffstat (limited to 'src/boost/libs/local_function/example/profile_local_functor.cpp')
-rw-r--r-- | src/boost/libs/local_function/example/profile_local_functor.cpp | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/src/boost/libs/local_function/example/profile_local_functor.cpp b/src/boost/libs/local_function/example/profile_local_functor.cpp new file mode 100644 index 000000000..abdef0bb7 --- /dev/null +++ b/src/boost/libs/local_function/example/profile_local_functor.cpp @@ -0,0 +1,50 @@ + +// Copyright (C) 2009-2012 Lorenzo Caminiti +// Distributed under the Boost Software License, Version 1.0 +// (see accompanying file LICENSE_1_0.txt or a copy at +// http://www.boost.org/LICENSE_1_0.txt) +// Home at http://www.boost.org/libs/local_function + +#include <boost/chrono.hpp> +#include <vector> +#include <algorithm> +#include <iostream> +#include "profile_helpers.hpp" + +int main(int argc, char* argv[]) { + unsigned long size = 0, trials = 0; + profile::args(argc, argv, size, trials); + + double sum = 0.0; + int factor = 1; + + boost::chrono::system_clock::time_point start = + boost::chrono::system_clock::now(); + struct local_add { + local_add(double& _sum, const int& _factor): + sum(_sum), factor(_factor) {} + inline void operator()(const double& num) { + sum += factor * num; + } + private: + double& sum; + const int& factor; + } add(sum, factor); + boost::chrono::duration<double> decl_sec = + boost::chrono::system_clock::now() - start; + + std::vector<double> v(size); + std::fill(v.begin(), v.end(), 1.0); + + boost::chrono::duration<double> trials_sec; + for(unsigned long i = 0; i < trials; ++i) { + boost::chrono::system_clock::time_point start = + boost::chrono::system_clock::now(); + for(unsigned long j = 0; j < v.size(); ++j) add(v[j]); // No for_each. + trials_sec += boost::chrono::system_clock::now() - start; + } + + profile::display(size, trials, sum, trials_sec.count(), decl_sec.count()); + return 0; +} + |