|
Rcpp Version 0.9.10
|
00001 // -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- 00002 // 00003 // Timer.h: Rcpp R/C++ interface class library -- simple timer class 00004 // 00005 // Copyright (C) 2010 Dirk Eddelbuettel and Romain Francois 00006 // 00007 // This file is part of Rcpp. 00008 // 00009 // Rcpp is free software: you can redistribute it and/or modify it 00010 // under the terms of the GNU General Public License as published by 00011 // the Free Software Foundation, either version 2 of the License, or 00012 // (at your option) any later version. 00013 // 00014 // Rcpp is distributed in the hope that it will be useful, but 00015 // WITHOUT ANY WARRANTY; without even the implied warranty of 00016 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00017 // GNU General Public License for more details. 00018 // 00019 // You should have received a copy of the GNU General Public License 00020 // along with Rcpp. If not, see <http://www.gnu.org/licenses/>. 00021 00022 00023 // Simple timer class based on on ideas in atimer.h / atimer.cxx found a few years ago at 00024 // http://www.cs.uiowa.edu/~sriram/30/fall03/ 00025 // and attributed to Amir Elaguizy while under GPL 00026 // but converted to using gettimeofday/GetSystemTime instead 00027 00028 #ifndef TIMER_H 00029 #define TIMER_H 00030 00031 class Timer { 00032 public: 00033 Timer() : sys_time("Sys.time") { Reset(); } 00034 void Start() { start_t = getFractionalSeconds() ; } 00035 void Stop() { 00036 end_t = getFractionalSeconds(); 00037 elapsed = end_t - start_t; // Calculate elapsed time in seconds 00038 cumul += elapsed; 00039 } 00040 void Reset() { end_t = start_t = elapsed = cumul = 0.0; } 00041 double ElapsedTime() { return elapsed; } 00042 double CumulativeTime() { return cumul; } 00043 00044 00045 private: 00046 Function sys_time ; 00047 double start_t, end_t, elapsed, cumul; 00048 00049 double getFractionalSeconds(void) { 00050 return as<double>( sys_time() ) ; 00051 } 00052 }; 00053 00054 #endif 00055