Removed some unnecessary files.
     2  * src/lemon/time_measure.h - Part of LEMON, a generic C++ optimization library
 
     4  * Copyright (C) 2004 Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport
 
     5  * (Egervary Combinatorial Optimization Research Group, EGRES).
 
     7  * Permission to use, modify and distribute this software is granted
 
     8  * provided that this copyright notice appears in all copies. For
 
     9  * precise terms see the accompanying LICENSE file.
 
    11  * This software is provided "AS IS" with no warranty of any kind,
 
    12  * express or implied, and with no claim as to its suitability for any
 
    17 #ifndef LEMON_TIME_MEASURE_H
 
    18 #define LEMON_TIME_MEASURE_H
 
    22 ///\brief Tools for measuring cpu usage
 
    25 #include <sys/times.h>
 
    35   /// A class to store (cpu)time instances.
 
    37   /// This class stores five time values.
 
    40   /// - a system cpu time
 
    41   /// - a user cpu time of children
 
    42   /// - a system cpu time of children
 
    44   /// TimeStamp's can be added to or substracted from each other and
 
    45   /// they can be pushed to a stream.
 
    47   /// In most cases, perhaps \ref Timer class is what you want to use instead.
 
    49   ///\author Alpar Juttner
 
    58     tms &getTms() {return ts;}
 
    59     const tms &getTms() const {return ts;}
 
    60     ///Read the current time values of the process
 
    65       gettimeofday(&tv, 0);real_time=tv.tv_sec+double(tv.tv_usec)/1e6;
 
    68     /// Constructor initializing with zero
 
    70     { ts.tms_utime=ts.tms_stime=ts.tms_cutime=ts.tms_cstime=0; real_time=0;}
 
    71     ///Constructor initializing with the current time values of the process
 
    72     TimeStamp(void *) { stamp();}
 
    75     TimeStamp &operator+=(const TimeStamp &b)
 
    77       ts.tms_utime+=b.ts.tms_utime;
 
    78       ts.tms_stime+=b.ts.tms_stime;
 
    79       ts.tms_cutime+=b.ts.tms_cutime;
 
    80       ts.tms_cstime+=b.ts.tms_cstime;
 
    81       real_time+=b.real_time;
 
    85     TimeStamp operator+(const TimeStamp &b) const
 
    91     TimeStamp &operator-=(const TimeStamp &b)
 
    93       ts.tms_utime-=b.ts.tms_utime;
 
    94       ts.tms_stime-=b.ts.tms_stime;
 
    95       ts.tms_cutime-=b.ts.tms_cutime;
 
    96       ts.tms_cstime-=b.ts.tms_cstime;
 
    97       real_time-=b.real_time;
 
   101     TimeStamp operator-(const TimeStamp &b) const
 
   106     ///The time ellapsed since the last call of stamp()
 
   107     TimeStamp ellapsed() const
 
   113     friend std::ostream& operator<<(std::ostream& os,const TimeStamp &t);
 
   115     ///Gives back the user time of the process
 
   116     double getUserTime() const
 
   118       return double(ts.tms_utime)/sysconf(_SC_CLK_TCK);
 
   120     ///Gives back the system time of the process
 
   121     double getSystemTime() const
 
   123       return double(ts.tms_stime)/sysconf(_SC_CLK_TCK);
 
   125     ///Gives back the user time of the process' children
 
   126     double getCUserTime() const
 
   128       return double(ts.tms_cutime)/sysconf(_SC_CLK_TCK);
 
   130     ///Gives back the user time of the process' children
 
   131     double getCSystemTime() const
 
   133       return double(ts.tms_cstime)/sysconf(_SC_CLK_TCK);
 
   135     ///Gives back the real time of the process
 
   136     double getRealTime() const {return real_time;}
 
   139   ///Class measuring the cpu time and real time usage of the process
 
   141   ///Class measuring the cpu time and real time usage of the process.
 
   142   ///It is quite easy-to-use, here is a short example.
 
   144   ///#include<lemon/time_measure.h>
 
   145   ///#include<iostream>
 
   154   ///  std::cout << T << '\n';
 
   156   ///  doSomethingElse();
 
   157   ///  std::cout << T << '\n';
 
   164   ///\todo This shouldn't be Unix (Linux) specific.
 
   166   ///\author Alpar Juttner
 
   169     TimeStamp start_time;
 
   171     void _reset() {start_time.stamp();}
 
   174     ///Constructor. It starts with zero time counters
 
   177     ///Computes the ellapsed time
 
   179     ///This conversion computes the ellapsed time
 
   180     ///since the construction of \c t or since
 
   181     ///the last \c t.reset().
 
   182     operator TimeStamp () const
 
   189     ///Resets the time counters
 
   191     ///Resets the time counters
 
   199     ///Gives back the ellapsed user time of the process
 
   200     double getUserTime() const
 
   202       return operator TimeStamp().getUserTime();
 
   204     ///Gives back the ellapsed system time of the process
 
   205     double getSystemTime() const
 
   207       return operator TimeStamp().getSystemTime();
 
   209     ///Gives back the ellapsed user time of the process' children
 
   210     double getCUserTime() const
 
   212       return operator TimeStamp().getCUserTime();
 
   214     ///Gives back the ellapsed user time of the process' children
 
   215     double getCSystemTime() const
 
   217       return operator TimeStamp().getCSystemTime();
 
   219     ///Gives back the ellapsed real time of the process
 
   220     double getRealTime() const
 
   222       return operator TimeStamp().getRealTime();
 
   227   ///Prints the time counters
 
   229   ///Prints the time counters in the following form:
 
   231   /// <tt>u: XX.XXs s: XX.XXs cu: XX.XXs cs: XX.XXs real: XX.XXs</tt>
 
   233   /// where the values are the
 
   234   /// \li \c u: user cpu time,
 
   235   /// \li \c s: system cpu time,
 
   236   /// \li \c cu: user cpu time of children,
 
   237   /// \li \c cs: system cpu time of children,
 
   238   /// \li \c real: real time.
 
   239   /// \relates TimeStamp
 
   240   inline std::ostream& operator<<(std::ostream& os,const TimeStamp &t)
 
   242     long cls = sysconf(_SC_CLK_TCK);
 
   243     os << "u: " << double(t.getTms().tms_utime)/cls <<
 
   244       "s, s: " << double(t.getTms().tms_stime)/cls <<
 
   245       "s, cu: " << double(t.getTms().tms_cutime)/cls <<
 
   246       "s, cs: " << double(t.getTms().tms_cstime)/cls <<
 
   247       "s, real: " << t.getRealTime() << "s";
 
   255 #endif //LEMON_TIME_MEASURE_H