diff options
Diffstat (limited to 'src/third_party/boost-1.69.0/boost/chrono/round.hpp')
-rw-r--r-- | src/third_party/boost-1.69.0/boost/chrono/round.hpp | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/src/third_party/boost-1.69.0/boost/chrono/round.hpp b/src/third_party/boost-1.69.0/boost/chrono/round.hpp new file mode 100644 index 00000000000..09741fcf098 --- /dev/null +++ b/src/third_party/boost-1.69.0/boost/chrono/round.hpp @@ -0,0 +1,59 @@ +// 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 |