GeoTessCPP  2.0.0
Software to facilitate storage and retrieval of 3D information about the Earth.
 All Classes Namespaces Files Functions Variables Typedefs Friends Defines
include/CpuTimer.h
Go to the documentation of this file.
00001 //- ****************************************************************************
00002 //- 
00003 //- Copyright 2009 Sandia Corporation. Under the terms of Contract
00004 //- DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government
00005 //- retains certain rights in this software.
00006 //- 
00007 //- BSD Open Source License.
00008 //- All rights reserved.
00009 //- 
00010 //- Redistribution and use in source and binary forms, with or without
00011 //- modification, are permitted provided that the following conditions are met:
00012 //- 
00013 //-    * Redistributions of source code must retain the above copyright notice,
00014 //-      this list of conditions and the following disclaimer.
00015 //-    * Redistributions in binary form must reproduce the above copyright
00016 //-      notice, this list of conditions and the following disclaimer in the
00017 //-      documentation and/or other materials provided with the distribution.
00018 //-    * Neither the name of Sandia National Laboratories nor the names of its
00019 //-      contributors may be used to endorse or promote products derived from
00020 //-      this software without specific prior written permission.
00021 //- 
00022 //- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
00023 //- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
00024 //- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
00025 //- ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
00026 //- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
00027 //- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
00028 //- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
00029 //- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
00030 //- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
00031 //- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
00032 //- POSSIBILITY OF SUCH DAMAGE.
00033 //-
00034 //- ****************************************************************************
00035 
00036 #ifndef CPU_TIMER_H
00037 #define CPU_TIMER_H
00038 
00039 // **** _SYSTEM INCLUDES_ ******************************************************
00040 
00041 #include <ctime>
00042 
00043 // use standard library objects
00044 using namespace std;
00045 
00046 // **** _LOCAL INCLUDES_ *******************************************************
00047 
00048 #include "CPPUtils.h"
00049 
00050 // **** _BEGIN GEOTESS NAMESPACE_ **********************************************
00051 
00052 namespace geotess {
00053 
00054 // **** _FORWARD REFERENCES_ ***************************************************
00055 
00056 // **** _CLASS DEFINITION_ *****************************************************
00057 
00064 class GEOTESS_EXP_IMP CpuTimer
00065 {
00066   private:
00067 
00068     // Last real time set when init_timer was called or 'this' CpuTimer was
00069     // constructed (msec)
00070     double                                              cpuRealTime;
00071 
00072     // Last cpu time set when init_timer was called or 'this' CpuTimer was
00073     // constructed (msec)
00074     double                                              cpuCPUTime;
00075 
00076   public:
00077 
00078     // Default constructor initialies timer
00079                                                                                         CpuTimer();
00080 
00081     // Initializes timer
00082     void                                                        initTimer();
00083 
00087     static double                       getCurrCPUTime()
00088                                                                         { return (double) 1000.0 * clock() / CLOCKS_PER_SEC; }
00089 
00093     static double                       getCurrRealTime()
00094                                                                         { return (double) 1000.0 * time(NULL); }
00095 
00096     // Returns cpu time (ms) since last init_timer call. The second
00097     // function also reinitializes cpuCPUTime.
00098     double                                              cpuTime();
00099     double                                              cpuTimeInit();
00100 
00101     // Returns real time (ms) since last init_timer call. The second
00102     // function also reinitializes cpuRealTime.
00103     double                                              realTime();
00104     double                                              realTimeInit();
00105 
00106     // Static elapsed time string output functions given an input elapsed
00107     // time in msec.
00108     static string                       elapsedTimeString(double tm);
00109     static string                       elapsedTimeStringFraction(double tm);
00110     static string                       elapsedTimeStringFractionAbbrvUnits(double tm);
00111 
00112     // Returns the current time string
00113     static string                       now();
00114 };
00115 
00116 } // end namespace geotess
00117 
00118 #endif  // CPU_TIMER_H