home *** CD-ROM | disk | FTP | other *** search
- /****************************************************************************
- *
- * The Zen Timer Library
- *
- * From the book
- * "Zen of Assembly Language"
- * Volume 1, Knowledge
- *
- * by Michael Abrash
- *
- * Modifications by Kendall Bennett
- * Copyright (C) 1993-4 SciTech Software
- *
- * Filename: $Workfile: ztimer.cpp $
- * Version: $Revision: 1.0 $
- *
- * Language: C++ 2.1
- * Environment: IBM PC (MS DOS)
- *
- * Description: Non-inline member functions for the C++ class interface
- * to the Zen Timer Library.
- *
- * $Date: 05 Feb 1996 14:50:22 $ $Author: KendallB $
- *
- ****************************************************************************/
-
- #include <stdio.h>
- #include <iostream.h>
- #include "pmode.h"
- #include "ztimer.h"
-
- /*----------------------------- Implementation ----------------------------*/
-
- // Compute the time elapsed between calls to LZTimerOn() and LZTimerOff()
- // and add it to the current count.
-
- void LZTimer::computeTime()
- {
- if (!overflow()) {
- ulong newcount = LZTimerCount();
- if (newcount == 0xFFFFFFFFL)
- _overflow = true;
- else
- _count += newcount;
- }
- }
-
- // Routine to stop the ultra long period timer. The timer resolution is low
- // enough to make this routine non-inline.
-
- void ULZTimer::stop()
- {
- _finish = ULZReadTime();
- _count += ULZElapsedTime(_start,_finish);
- }
-
- ostream& operator << (ostream& o,LZTimer& timer)
- {
- char buf[40];
-
- if (!timer.overflow()) {
- sprintf(buf, "%.6f", timer.count() * timer.resolution());
- o << buf;
- }
- else
- o << "overflow";
- return o;
- }
-
- ostream& operator << (ostream& o,ULZTimer& timer)
- {
- char buf[40];
-
- sprintf(buf, "%.1f", timer.count() * timer.resolution());
- return o << buf;
- }
-