timer.hh
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038 #ifndef __GECODE_SUPPORT_TIMER_HH__
00039 #define __GECODE_SUPPORT_TIMER_HH__
00040
00041 #include <gecode/support.hh>
00042
00043 #ifdef GECODE_USE_GETTIMEOFDAY
00044 #include <sys/time.h>
00045 #endif
00046
00047 #ifdef GECODE_USE_CLOCK
00048 #include <ctime>
00049 #endif
00050
00051 namespace Gecode { namespace Support {
00052
00060 class Timer {
00061 private:
00062 #if defined(GECODE_USE_GETTIMEOFDAY)
00063 timeval t0;
00064 #elif defined(GECODE_USE_CLOCK)
00065 clock_t t0;
00066 #endif
00067 public:
00069 void start(void) {
00070 #if defined(GECODE_USE_GETTIMEOFDAY)
00071 if (gettimeofday(&t0, NULL))
00072 throw OperatingSystemError("Timer::start[gettimeofday]");
00073 #elif defined(GECODE_USE_CLOCK)
00074 t0 = clock();
00075 #endif
00076 }
00078 double stop(void) {
00079 #if defined(GECODE_USE_GETTIMEOFDAY)
00080 timeval t1, t;
00081 if (gettimeofday(&t1, NULL))
00082 throw OperatingSystemError("Timer::stop[gettimeofday]");
00083 timersub(&t1, &t0, &t);
00084 return (static_cast<double>(t.tv_sec) * 1000.0) +
00085 (static_cast<double>(t.tv_usec)/1000.0);
00086 #elif defined(GECODE_USE_CLOCK)
00087 return (static_cast<double>(clock()-t0) / CLOCKS_PER_SEC) * 1000.0;
00088 #endif
00089 }
00090 };
00091
00092 }}
00093
00094 #endif
00095
00096