00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #include <stdio.h>
00023 #include <Basics.H>
00024 #include "Debug.H"
00025 #include <sys/time.h>
00026 #if defined (__linux__)
00027 #include <unistd.h>
00028 #endif
00029
00030
00031 class FatalError {
00032 public: FatalError() { }
00033 };
00034
00035
00036 Basics::mutex Debug_mu;
00037 const int Debug_TimeStampLen = 28;
00038 char Debug_TimeStampBuff[Debug_TimeStampLen];
00039
00040 void Debug::Lock() throw () { Debug_mu.lock(); }
00041 void Debug::Unlock() throw () { Debug_mu.unlock(); }
00042
00043 char *Debug::Timestamp() throw ()
00044
00045
00046 {
00047 struct timeval tv;
00048 struct timezone tz;
00049 struct tm *tm;
00050 if (gettimeofday(&tv, &tz) < 0) {
00051 throw FatalError();
00052 }
00053 time_t secs = tv.tv_sec;
00054 if((tm = localtime(&secs)) == NULL) {
00055 throw FatalError();
00056 }
00057 sprintf(Debug_TimeStampBuff, "%02d:%02d:%02d.%03d %02d/%02d/%04d -- ",
00058 tm->tm_hour, tm->tm_min, tm->tm_sec, tv.tv_usec/1000,
00059 tm->tm_mon + 1, tm->tm_mday, tm->tm_year + 1900);
00060 return Debug_TimeStampBuff;
00061 }
00062
00063 int Debug::MyRand(int lower, int upper) throw ()
00064 {
00065 int res;
00066 res = lower + (rand() % (upper-lower+1));
00067 return res;
00068 }
00069
00070 void Debug::BlockForever() throw ()
00071 {
00072 Basics::mutex mu0;
00073 Basics::cond cond0;
00074 mu0.lock();
00075 cond0.wait(mu0);
00076 }