// 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 #include //#include namespace lslboost { namespace chrono { /** * rounds to nearest, to even on tie */ template To round(const duration& d) { typedef typename common_type >::type result_type; result_type diff0; result_type diff1; To t0 = duration_cast(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 lslboost #endif