--- /dev/null
+// Copyright 2010 Vicente J. Botet Escriba
+// Distributed under the Boost Software License, Version 1.0.
+// See http://www.boost.org/LICENSE_1_0.txt
+
+#ifndef BOOST_CHRONO_TEST_CYCLE_COUNT_HPP
+#define BOOST_CHRONO_TEST_CYCLE_COUNT_HPP
+
+#include <boost/chrono/ceil.hpp>
+#include <boost/chrono/duration.hpp>
+#include <boost/chrono/time_point.hpp>
+#include <boost/chrono/stopwatches/reporters/stopwatch_reporter_default_formatter.hpp>
+#include <boost/chrono/stopwatches/formatters/elapsed_formatter.hpp>
+#include <boost/chrono/stopwatches/strict_stopwatch.hpp>
+
+namespace ex
+{
+ template <long long speed>
+ struct cycle_count
+ {
+ typedef typename boost::ratio_multiply<boost::ratio<speed>, boost::mega>::type frequency; // Mhz
+ typedef typename boost::ratio_divide<boost::ratio<1>, frequency>::type period;
+ typedef long long rep;
+ typedef boost::chrono::duration<rep, period> duration;
+ typedef boost::chrono::time_point<cycle_count> time_point;
+ BOOST_STATIC_CONSTEXPR bool is_steady = true;
+ static long long ticks_;
+
+ static time_point now()
+ {
+ // return exact cycle count
+ return time_point(duration(ticks_));
+ }
+ static time_point now(boost::system::error_code & )
+ {
+ // return exact cycle count
+ return time_point(duration(ticks_));
+ }
+ static void advance(std::size_t ticks)
+ {
+ ticks_ += ticks;
+ }
+ template <typename D>
+ static void advance(D const& d)
+ {
+ ticks_ += boost::chrono::ceil<duration>(d).count();
+ }
+ };
+ template <long long speed>
+ long long cycle_count<speed>::ticks_ = 0;
+
+
+ template<class Clock, class Rep, class Period>
+ void sleep_for(const boost::chrono::duration<Rep, Period>& d)
+ {
+ Clock::advance(d);
+ }
+
+}
+
+
+namespace boost
+{
+ namespace chrono
+ {
+
+ template <typename CharT, long long speed>
+ struct basic_stopwatch_reporter_default_formatter<CharT, strict_stopwatch<ex::cycle_count<speed> > >
+ {
+ typedef basic_elapsed_formatter<milli, CharT> type;
+ };
+
+// template <long long speed>
+// struct wstopwatch_reporter_default_formatter<strict_stopwatch<ex::cycle_count<speed> > >
+// {
+// typedef welapsed_formatter type;
+// };
+
+ } // namespace chrono
+} // namespace boost
+
+
+#endif