diff options
author | Josh Blum | 2013-03-20 23:02:06 -0700 |
---|---|---|
committer | Josh Blum | 2013-03-20 23:02:06 -0700 |
commit | f954bb2d93b083ff911a014711b1ea079060faf7 (patch) | |
tree | a9be6882cff74c3b14434a27c53d6681deb5f781 /include/gras/detail | |
parent | 6f16dac3572a81170405fdfe8374356257c0f060 (diff) | |
download | sandhi-f954bb2d93b083ff911a014711b1ea079060faf7.tar.gz sandhi-f954bb2d93b083ff911a014711b1ea079060faf7.tar.bz2 sandhi-f954bb2d93b083ff911a014711b1ea079060faf7.zip |
gras: move chrono implementation into detail
Diffstat (limited to 'include/gras/detail')
-rw-r--r-- | include/gras/detail/chrono.hpp | 74 |
1 files changed, 74 insertions, 0 deletions
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 <windows.h> + +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 <ctime> + +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*/ |