1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- // boost/chrono/round.hpp ------------------------------------------------------------//
- // (C) Copyright Howard Hinnant
- // Copyright 2011 Vicente J. Botet Escriba
- // Distributed under the Boost Software License, Version 1.0. (See accompanying
- // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
- // See http://www.boost.org/libs/chrono for documentation.
- #ifndef BOOST_CHRONO_ROUND_HPP
- #define BOOST_CHRONO_ROUND_HPP
- #include <boost/chrono/duration.hpp>
- #include <boost/chrono/duration.hpp>
- //#include <boost/chrono/typeof/boost/chrono/chrono.hpp>
- namespace boost
- {
- namespace chrono
- {
- /**
- * rounds to nearest, to even on tie
- */
- template <class To, class Rep, class Period>
- To round(const duration<Rep, Period>& d)
- {
- typedef typename common_type<To, duration<Rep, Period> >::type result_type;
- result_type diff0;
- result_type diff1;
- To t0 = duration_cast<To>(d);
- To t1 = t0;
- if (t0>d) {
- --t1;
- diff0 = t0 - d;
- diff1 = d - t1;
- } else {
- ++t1;
- diff0 = d - t0;
- diff1 = t1 - d;
- }
- if (diff0 == diff1)
- {
- if (t0.count() & 1)
- return t1;
- return t0;
- }
- else if (diff0 < diff1)
- return t0;
- return t1;
- }
- } // namespace chrono
- } // namespace boost
- #endif
|