2014 Eurobot fork

Dependencies:   mbed-rtos mbed QEI

Revision:
15:9c5aaeda36dc
diff -r c638d4b9ee94 -r 9c5aaeda36dc tvmet/util/Timer.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tvmet/util/Timer.h	Sat Apr 06 20:57:54 2013 +0000
@@ -0,0 +1,98 @@
+/*
+ * Tiny Vector Matrix Library
+ * Dense Vector Matrix Libary of Tiny size using Expression Templates
+ *
+ * Copyright (C) 2001 - 2007 Olaf Petzold <opetzold@users.sourceforge.net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * $Id: Timer.h,v 1.9 2007-06-23 15:58:59 opetzold Exp $
+ */
+
+#ifndef TVMET_UTIL_TIMER_H
+#define TVMET_UTIL_TIMER_H
+
+#if defined(TVMET_HAVE_SYS_TIME_H) && defined(TVMET_HAVE_UNISTD_H)
+#  include <sys/time.h>
+#  include <sys/resource.h>
+#  include <unistd.h>
+#else
+#  include <ctime>
+#endif
+
+namespace tvmet {
+
+namespace util {
+
+/**
+   \class Timer Timer.h "tvmet/util/Timer.h"
+   \brief A quick& dirty portable timer, measures elapsed time.
+
+   It is recommended that implementations measure wall clock rather than CPU
+   time since the intended use is performance measurement on systems where
+   total elapsed time is more important than just process or CPU time.
+
+   The accuracy of timings depends on the accuracy of timing information
+   provided by the underlying platform, and this varies from platform to
+   platform.
+*/
+
+class Timer
+{
+  Timer(const Timer&);
+  Timer& operator=(const Timer&);
+
+public: // types
+  typedef double                    time_t;
+
+public:
+  /** starts the timer immediatly. */
+  Timer() { m_start_time = getTime(); }
+
+  /** restarts the timer */
+  void restart() { m_start_time = getTime(); }
+
+  /** return elapsed time in seconds */
+  time_t elapsed() const { return (getTime() - m_start_time); }
+
+private:
+  time_t getTime() const {
+#if defined(TVMET_HAVE_SYS_TIME_H) && defined(TVMET_HAVE_UNISTD_H)
+    getrusage(RUSAGE_SELF, &m_rusage);
+    time_t sec = m_rusage.ru_utime.tv_sec; // user, no system time
+    time_t usec  = m_rusage.ru_utime.tv_usec; // user, no system time
+    return sec + usec/1e6;
+#else
+    return static_cast<time_t>(std::clock()) / static_cast<time_t>(CLOCKS_PER_SEC);
+#endif
+  }
+
+private:
+#if defined(TVMET_HAVE_SYS_TIME_H) && defined(TVMET_HAVE_UNISTD_H)
+  mutable struct rusage                 m_rusage;
+#endif
+  time_t                         m_start_time;
+};
+
+} // namespace util
+
+} // namespace tvmet
+
+#endif // TVMET_UTIL_TIMER_H
+
+// Local Variables:
+// mode:C++
+// tab-width:8
+// End: