Applied initial patches for wx2.8 compatibility
[ctsim.git] / include / timer.h
index 781ee941c9fdec87e207a8f945a97d4d2ddbef1c..9e4118eba052e5213788b92c1b279658017c3abb 100644 (file)
@@ -1,39 +1,76 @@
+/*****************************************************************************
+** FILE IDENTIFICATION
+**
+**      Name:         timer.h
+**      Purpose:      Header file for Timer class
+**      Author:       Kevin Rosenberg
+**      Date Started: Sep 2000
+**
+**  This is part of the CTSim program
+**  Copyright (c) 1983-2001 Kevin Rosenberg
+**
+**  $Id$
+**
+**  This program is free software; you can redistribute it and/or modify
+**  it under the terms of the GNU General Public License (version 2) as
+**  published by the Free Software Foundation.
+**
+**  This program is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+**  GNU General Public License for more details.
+**
+**  You should have received a copy of the GNU General Public License
+**  along with this program; if not, write to the Free Software
+**  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+******************************************************************************/
+
+#ifndef _TIMER_H
+#define _TIMER_H
+
 #ifdef HAVE_CONFIG_H
 #include "config.h"
 #endif
 
+#ifdef HAVE_SYS_TIME_H
 #include <sys/time.h>
+#endif
+
+#ifdef MSVC
+#include <sys/timeb.h>
+#endif
 
 class Timer
 {
  public:
     Timer (void)
-       { m_timeStart = ttime(); }
+        { m_timeStart = ttime(); }
 
     virtual ~Timer (void)
-       {}
+        {}
 
     virtual double timerEnd (void)
       {
-       m_timeEnd = ttime();
-       m_timeElapsed = m_timeEnd - m_timeStart;
-  
-       return (m_timeElapsed);
+        m_timeEnd = ttime();
+        m_timeElapsed = m_timeEnd - m_timeStart;
+
+        return (m_timeElapsed);
       }
 
     virtual void timerReport (const char* const msg) const
       {
-         cout << msg << ": " << m_timeElapsed << " seconds" << endl;
+                std::cout << msg << ": " << m_timeElapsed << " seconds" << std::endl;
       }
 
     virtual double timerEndAndReport (const char* const msg)
       {
-       timerEnd ();
-       timerReport (msg);
+        double t = timerEnd ();
+        timerReport (msg);
+        return (t);
       }
 
     double getTimeElapsed (void) const
-       { return m_timeElapsed; }
+        { return m_timeElapsed; }
 
  protected:
     double m_timeStart;
@@ -41,13 +78,21 @@ class Timer
     double m_timeElapsed;
 
     double ttime(void) const
-       {
-           struct timeval now;
-           if (gettimeofday (&now, NULL))
-               return 0;
-           
-           return (now.tv_sec + static_cast<double>(now.tv_usec) / 1000000.);
-       }
+        {
+#ifdef HAVE_GETTIMEOFDAY
+            struct timeval now;
+            if (gettimeofday (&now, NULL))
+                return 0;
+
+            return (now.tv_sec + static_cast<double>(now.tv_usec) / 1000000.);
+#elif defined(MSVC)
+                struct _timeb now;
+                _ftime (&now);
+                return (now.time + static_cast<double>(now.millitm) / 1000.);
+#else
+            return 0;
+#endif
+        }
 };
 
 
@@ -59,9 +104,9 @@ class TimerMPI : public Timer
 {
  public:
     TimerMPI (MPI::Intracomm& comm)
-       : m_comm(comm)
+        : m_comm(comm)
       {
-         m_timeStart = MPI::Wtime();
+          m_timeStart = MPI::Wtime();
       }
 
     virtual ~TimerMPI (void)
@@ -69,27 +114,28 @@ class TimerMPI : public Timer
 
     virtual double timerEnd (void)
       {
-       m_timeEnd = MPI::Wtime();
-       m_timeElapsed = m_timeEnd - m_timeStart;
-  
-       return (m_timeElapsed);
+        m_timeEnd = MPI::Wtime();
+        m_timeElapsed = m_timeEnd - m_timeStart;
+
+        return (m_timeElapsed);
       }
 
     virtual void timerReport (const char* const msg)
       {
-         if (m_comm.Get_rank() == 0)
-             cout << msg << ": " << m_timeElapsed << " seconds" << endl;
+          if (m_comm.Get_rank() == 0)
+                  std::cout << msg << ": " << m_timeElapsed << " seconds" << std::endl;
       }
 
     virtual double timerEndAndReport (const char* const msg)
       {
-       timerEnd ();
-       timerReport (msg);
+        double t = timerEnd ();
+        timerReport (msg);
+        return (t);
       }
 
     virtual void timerReportAllProcesses (const char* const msg)
       {
-         timerReport (msg);
+          timerReport (msg);
       }
 
  protected:
@@ -100,10 +146,10 @@ class TimerCollectiveMPI : public TimerMPI
 {
  public:
     TimerCollectiveMPI (MPI::Intracomm& comm)
-       : TimerMPI::TimerMPI (comm)
+        : TimerMPI::TimerMPI (comm)
       {
-       m_comm.Barrier();
-       m_timeStart = MPI::Wtime();
+        m_comm.Barrier();
+        m_timeStart = MPI::Wtime();
       }
 
     virtual ~TimerCollectiveMPI (void)
@@ -111,29 +157,30 @@ class TimerCollectiveMPI : public TimerMPI
 
     virtual double timerEnd (void)
       {
-       m_timeEnd = MPI::Wtime();
-       m_timeElapsed = m_timeEnd - m_timeStart;
-       m_comm.Reduce (&m_timeElapsed, &m_timeMin, 1, MPI::DOUBLE, MPI::MIN, 0);
-       m_comm.Reduce (&m_timeElapsed, &m_timeMax, 1, MPI::DOUBLE, MPI::MAX, 0);
-  
-       return (m_timeElapsed);
+        m_timeEnd = MPI::Wtime();
+        m_timeElapsed = m_timeEnd - m_timeStart;
+        m_comm.Reduce (&m_timeElapsed, &m_timeMin, 1, MPI::DOUBLE, MPI::MIN, 0);
+        m_comm.Reduce (&m_timeElapsed, &m_timeMax, 1, MPI::DOUBLE, MPI::MAX, 0);
+
+        return (m_timeElapsed);
       }
 
     virtual double timerEndAndReport (const char* const msg)
       {
-       timerEnd ();
-       timerReport (msg);
+        double t = timerEnd ();
+        timerReport (msg);
+        return (t);
       }
 
     virtual void timerReport (const char* const msg)
       {
-       if (m_comm.Get_rank() == 0)
-         cout << msg << " " << "Minimum=" << m_timeMin << ", Maximum=" << m_timeMax << " seconds" << endl;
+        if (m_comm.Get_rank() == 0)
+                std::cout << msg << " " << "Minimum=" << m_timeMin << ", Maximum=" << m_timeMax << " seconds" << std::endl;
       }
 
     virtual void timerReportAllProcesses (const char* const msg)
       {
-         cout << msg << ": " << "Minimum=" << m_timeMin << ", Maximum=" << m_timeMax << " seconds (Rank " << m_comm.Get_rank() << ")" << endl;
+                std::cout << msg << ": " << "Minimum=" << m_timeMin << ", Maximum=" << m_timeMax << " seconds (Rank " << m_comm.Get_rank() << ")" << std::endl;
       }
 
  private:
@@ -143,5 +190,6 @@ class TimerCollectiveMPI : public TimerMPI
 #endif
 
 
+#endif  // _TIMER_H