From f954bb2d93b083ff911a014711b1ea079060faf7 Mon Sep 17 00:00:00 2001 From: Josh Blum Date: Wed, 20 Mar 2013 23:02:06 -0700 Subject: gras: move chrono implementation into detail --- include/gras/detail/chrono.hpp | 74 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 include/gras/detail/chrono.hpp (limited to 'include/gras/detail') diff --git a/include/gras/detail/chrono.hpp b/include/gras/detail/chrono.hpp new file mode 100644 index 0000000..bd247e5 --- /dev/null +++ b/include/gras/detail/chrono.hpp @@ -0,0 +1,74 @@ +// Copyright (C) by Josh Blum. See LICENSE.txt for licensing information. + +#ifndef INCLUDED_GRAS_DETAIL_CHRONO_HPP +#define INCLUDED_GRAS_DETAIL_CHRONO_HPP + +#if defined(_WIN32) || defined(__WIN32__) || defined(WIN32) + +#include + +namespace gras +{ + + GRAS_FORCE_INLINE time_ticks_t time_now(void) + { + LARGE_INTEGER counts; + QueryPerformanceCounter(&counts); + return counts.QuadPart; + } + + GRAS_FORCE_INLINE time_ticks_t time_tps(void) + { + LARGE_INTEGER freq; + QueryPerformanceFrequency(&freq); + return freq.QuadPart; + } + +} //namespace gras + +#else + +#include + +namespace gras +{ + + GRAS_FORCE_INLINE time_ticks_t time_now(void) + { + struct timespec ts; + clock_gettime(CLOCK_MONOTONIC, &ts); + return ts.tv_sec*1000000000UL + ts.tv_nsec; + } + + GRAS_FORCE_INLINE time_ticks_t time_tps(void) + { + return 1000000000UL; + } + +} //namespace gras + +#endif + +namespace gras +{ + GRAS_FORCE_INLINE TimerAccumulate::TimerAccumulate(time_ticks_t &accum): + accum(accum), + start(time_now()), + is_done(false) + { + //NOP + } + + GRAS_FORCE_INLINE TimerAccumulate::~TimerAccumulate(void) + { + if (not is_done) this->done(); + } + + GRAS_FORCE_INLINE void TimerAccumulate::done(void) + { + accum += (time_now() - start); + is_done = true; + } +} + +#endif /*INCLUDED_GRAS_DETAIL_CHRONO_HPP*/ -- cgit