diff options
Diffstat (limited to 'src/boost/libs/chrono/example/io_ex5.cpp')
-rw-r--r-- | src/boost/libs/chrono/example/io_ex5.cpp | 90 |
1 files changed, 90 insertions, 0 deletions
diff --git a/src/boost/libs/chrono/example/io_ex5.cpp b/src/boost/libs/chrono/example/io_ex5.cpp new file mode 100644 index 000000000..4bd5cbb46 --- /dev/null +++ b/src/boost/libs/chrono/example/io_ex5.cpp @@ -0,0 +1,90 @@ +// io_ex1.cpp ----------------------------------------------------------// + +// Copyright 2010 Howard Hinnant +// Copyright 2010 Vicente J. Botet Escriba + +// Distributed under the Boost Software License, Version 1.0. +// See http://www.boost.org/LICENSE_1_0.txt + +/* +This code was adapted by Vicente J. Botet Escriba from Hinnant's html documentation. +Many thanks to Howard for making his code available under the Boost license. + +*/ + +#include <boost/chrono/chrono_io.hpp> +#include <ostream> +#include <iostream> + +// format duration as [-]d/hh::mm::ss.cc +template <class CharT, class Traits, class Rep, class Period> +std::basic_ostream<CharT, Traits>& +display(std::basic_ostream<CharT, Traits>& os, + boost::chrono::duration<Rep, Period> d) +{ + using std::cout; + using namespace boost; + using namespace boost::chrono; + + typedef duration<long long, ratio<86400> > days; + typedef duration<long long, centi> centiseconds; + + // if negative, print negative sign and negate + if (d < duration<Rep, Period>(0)) + { + d = -d; + os << '-'; + } + // round d to nearest centiseconds, to even on tie + centiseconds cs = duration_cast<centiseconds>(d); + if (d - cs > milliseconds(5) + || (d - cs == milliseconds(5) && cs.count() & 1)) + ++cs; + // separate seconds from centiseconds + seconds s = duration_cast<seconds>(cs); + cs -= s; + // separate minutes from seconds + minutes m = duration_cast<minutes>(s); + s -= m; + // separate hours from minutes + hours h = duration_cast<hours>(m); + m -= h; + // separate days from hours + days dy = duration_cast<days>(h); + h -= dy; + // print d/hh:mm:ss.cc + os << dy.count() << '/'; + if (h < hours(10)) + os << '0'; + os << h.count() << ':'; + if (m < minutes(10)) + os << '0'; + os << m.count() << ':'; + if (s < seconds(10)) + os << '0'; + os << s.count() << '.'; + if (cs < centiseconds(10)) + os << '0'; + os << cs.count(); + return os; +} + +int main() +{ + using std::cout; + using namespace boost; + using namespace boost::chrono; + +#ifdef BOOST_CHRONO_HAS_CLOCK_STEADY + display(cout, steady_clock::now().time_since_epoch() + + duration<long, mega>(1)) << '\n'; +#endif + display(cout, -milliseconds(6)) << '\n'; + display(cout, duration<long, mega>(1)) << '\n'; + display(cout, -duration<long, mega>(1)) << '\n'; +} + +//~ 12/06:03:22.95 +//~ -0/00:00:00.01 +//~ 11/13:46:40.00 +//~ -11/13:46:40.00 |