diff options
Diffstat (limited to 'src/third_party/boost-1.60.0/libs/chrono/stopwatches/include/boost/chrono/stopwatches/formatters/times_formatter.hpp')
-rwxr-xr-x | src/third_party/boost-1.60.0/libs/chrono/stopwatches/include/boost/chrono/stopwatches/formatters/times_formatter.hpp | 117 |
1 files changed, 117 insertions, 0 deletions
diff --git a/src/third_party/boost-1.60.0/libs/chrono/stopwatches/include/boost/chrono/stopwatches/formatters/times_formatter.hpp b/src/third_party/boost-1.60.0/libs/chrono/stopwatches/include/boost/chrono/stopwatches/formatters/times_formatter.hpp new file mode 100755 index 00000000000..4db70d08f7d --- /dev/null +++ b/src/third_party/boost-1.60.0/libs/chrono/stopwatches/include/boost/chrono/stopwatches/formatters/times_formatter.hpp @@ -0,0 +1,117 @@ +// boost/chrono/stopwatches/formatters/times_formatter.hpp ------------------------------------------------------------// +// Copyright 2011 Vicente J. Botet Escriba +// Distributed under the Boost Software License, Version 1.0. +// See http://www.boost.org/LICENSE_1_0.txt +// See http://www.boost.org/libs/chrono/stopwatches for documentation. + +#ifndef BOOST_CHRONO_STOPWATCHES_FORMATTERS_TIMES_HPP +#define BOOST_CHRONO_STOPWATCHES_FORMATTERS_TIMES_HPP + +#include <boost/chrono/stopwatches/formatters/base_formatter.hpp> +//#include <boost/chrono/detail/system.hpp> +#include <boost/current_function.hpp> +//#include <boost/chrono/stopwatches/detail/adaptive_string.hpp> +#include <boost/format.hpp> +#include <boost/format/group.hpp> +#include <boost/cstdint.hpp> +#include <boost/assert.hpp> +#include <string> +#include <iostream> +#include <cassert> +#include <iomanip> + +#define BOOST_CHRONO_STOPWATCHES_TIMES_FORMAT_DEFAULT "real %1%, cpu %4% (%5%%%), user %2%, system %3%\n" + +namespace boost +{ + namespace chrono + { + + template<typename Ratio = milli, typename CharT = char, + typename Traits = std::char_traits<CharT>, + class Alloc = std::allocator<CharT> > + class basic_times_formatter: public base_formatter<CharT, Traits>, public basic_format<CharT, Traits> + { + + public: + typedef base_formatter<CharT, Traits> base_type; + typedef basic_format<CharT, Traits> format_type; + typedef std::basic_string<CharT, Traits, Alloc> string_type; + typedef CharT char_type; + typedef std::basic_ostream<CharT, Traits> ostream_type; + + basic_times_formatter() : + base_type(), + format_type(BOOST_CHRONO_STOPWATCHES_TIMES_FORMAT_DEFAULT) + { + } + basic_times_formatter(ostream_type& os) : + base_type(os), + format_type(BOOST_CHRONO_STOPWATCHES_TIMES_FORMAT_DEFAULT) + { + } + basic_times_formatter(const char* fmt, ostream_type& os = std::cout) : + base_type(os), format_type(fmt) + { + } + basic_times_formatter(string_type const& fmt, ostream_type& os = + std::cout) : + base_type(os), format_type(fmt) + { + } + +// static string_type format(const char* s) +// { +// string_type res(s); +// res += boost::chrono::detail::adaptive_string(" : "); +// res += BOOST_CHRONO_STOPWATCHES_TIMES_FORMAT_DEFAULT; +// return res; +// } + + template<class Stopwatch> + void operator()(Stopwatch & stopwatch_ + //, system::error_code & ec= BOOST_CHRONO_THROWS + ) + { + typedef typename Stopwatch::duration::rep times_type; + //times_type times = stopwatch_.elapsed(ec).count(); + times_type times = stopwatch_.elapsed().count(); + + if (times.real < 0) + return; + double p; + if (times.real > 0) + p=double(times.user+times.system)*100/times.real; + else + p=0; + + duration_style_io_saver dsios(this->os_); + this->os_ << static_cast<format_type&>(*this) + % io::group(std::fixed, std::setprecision(this->precision_), duration_fmt(this->duration_style_), boost::chrono::duration<double, Ratio>(nanoseconds(times.real))) + % io::group(std::fixed, std::setprecision(this->precision_), duration_fmt(this->duration_style_), boost::chrono::duration<double, Ratio>(nanoseconds(times.user))) + % io::group(std::fixed, std::setprecision(this->precision_), duration_fmt(this->duration_style_), boost::chrono::duration<double, Ratio>(nanoseconds(times.system))) + % io::group(std::fixed, std::setprecision(this->precision_), duration_fmt(this->duration_style_), boost::chrono::duration<double, Ratio>(nanoseconds(times.user+times.system))) + % io::group(std::fixed, std::setprecision(2), p) + ; + } + }; + + typedef basic_times_formatter<milli, char> times_formatter; + typedef basic_times_formatter<milli, wchar_t> wtimes_formatter; + + } // namespace chrono +} // namespace boost + +#if 0 +#define BOOST_CHRONO_STOPWATCHES_TIMES_FORMAT(F) \ + boost::chrono::detail::adaptive_string(F " : " BOOST_CHRONO_STOPWATCHES_TIMES_FORMAT_DEFAULT) +#ifdef __GNUC__ +#define BOOST_CHRONO_STOPWATCHES_TIMES_FUNCTION_FORMAT \ + boost::chrono::times_formatter::format(BOOST_CURRENT_FUNCTION) +#else +#define BOOST_CHRONO_STOPWATCHES_TIMES_FUNCTION_FORMAT \ + BOOST_CHRONO_STOPWATCHES_TIMES_FORMAT(BOOST_CURRENT_FUNCTION) +#endif +#endif + +#endif |