// This may look like C code, but it is really -*- C++ -*- // // $Id: ctimer.h,v 1.5 2007-07-06 12:54:12 ansari Exp $ // #ifndef CTIMER_SEEN #define CTIMER_SEEN #include "machdefs.h" #include #include #include #include #include // Permet de chronometrer des fonctions. // Class Timer qui memorise l'heure de sa creation, et le temps CPU. // A la fin du bloc ou de la procedure, l'objet est detruit, // et son destructeur affiche le temps ecoule. namespace SOPHYA { //! Simple chronometer class class Timer { public: // L'objet memorise le temps CPU et l'heure, et le nom donne Timer(const char* name=0, bool prfg=true); // Le destructeur appelle split sans parametre. virtual ~Timer(); // Affiche le temps ecoule total/partiel, avec le nom eventuel. // Si pas de parametre affiche le nom donne a la creation. void Split(const char* comm=0, bool prfg=false); // Sert a eviter que GNU ne pretende qu'on utilise pas l'objet... /*! To avoid not used object compiler warnings */ void Nop() {} /*! \brief Return the total elapsed time (number of seconds), between the object creation and the last call to Split(). */ inline int_8 TotalElapsedTime() { return elapSecT ; } /*! \brief Return the partial elapsed time (number of seconds). between the last two calls to Split(). */ inline int_8 PartialElapsedTime() { return elapSecP ; } /*! \brief Return the total CPU time in seconds, between the object creation and the last call to Split(). */ inline float TotalCPUTime() { return cpuSecT; } /*! \brief Return the partial CPU time in seconds, between the last two calls to Split(). */ inline float PartialCPUTime() { return cpuSecP; } private: clock_t cpu0, cpuSplit; time_t elapse0, elapseSplit; float cpuSecT, cpuSecP; // Total and partial CPU time int_8 elapSecT, elapSecP; // Total and partial elapsed time string timerName; bool defprtflg; }; } // namespace SOPHYA #define TIMEF Timer timer(__PRETTY_FUNCTION__); timer.Nop(); #endif // CTIMER_SEEN