# subsystems/timer.hpp

    #ifndef STLPLUS_TIMER
    #define STLPLUS_TIMER
    ////////////////////////////////////////////////////////////////////////////////

    //   Author:    Andy Rushton
    //   Copyright: (c) Southampton University 1999-2004
    //              (c) Andy Rushton           2004 onwards
    //   License:   BSD License, see ../docs/license.html

    //   A CPU timer encapsulated as a class. Measures the CPU time used since its
    //   construction and allows this cumulative time to be reported at any time.

    ////////////////////////////////////////////////////////////////////////////////
    #include "subsystems_fixes.hpp"
    #include <time.h>
    #include <string>
    #include <iostream>

    namespace stlplus
    {

      ////////////////////////////////////////////////////////////////////////////////

      class timer
      {
      private:
        clock_t m_clock;
        time_t m_time;

      public:
        // constructor resets the timer to zero
        timer(void);
        ~timer(void);

        // reset the timer to zero without destroying it
        void reset(void);

        // get the elapsed time in seconds, expressed as a float
        double elapsed(void) const;
        // get the CPU time in seconds, expressed as a float
        double cpu(void) const;

        // get a printable string representing the elapsed time and CPU time
        std::string text(void) const;
      };

      ////////////////////////////////////////////////////////////////////////////////

      // print the elapsed time and CPU time using the same representation as the text method
      std::ostream& operator << (std::ostream&, const timer&);

      ////////////////////////////////////////////////////////////////////////////////

    } // end namespace stlplus

    #endif