summaryrefslogtreecommitdiff
path: root/include/gras/detail
diff options
context:
space:
mode:
authorJosh Blum2013-03-20 23:02:06 -0700
committerJosh Blum2013-03-20 23:02:06 -0700
commitf954bb2d93b083ff911a014711b1ea079060faf7 (patch)
treea9be6882cff74c3b14434a27c53d6681deb5f781 /include/gras/detail
parent6f16dac3572a81170405fdfe8374356257c0f060 (diff)
downloadsandhi-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.hpp74
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*/