Package: Util.Stop_Watches

Dependencies

with Ada.Calendar;

Description

Copyright © 2001, 2002 by Thomas Wolf.
This piece of software is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This software 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 with this distribution, see file "GPL.txt". If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
As a special exception from the GPL, if other files instantiate generics from this unit, or you link this unit with other files to produce an executable, this unit does not by itself cause the resulting executable to be covered by the GPL. This exception does not however invalidate any other reasons why the executable file might be covered by the GPL.

Version: 1.1

Author:
Thomas Wolf (TW) <twolf AT acm DOT org>
Purpose:
Stop watches; useful for simple timing tasks.
Tasking Semantics
Neither task- nor abortion-safe.
Storage Semantics
No dynamic storage allocation.

Header

package Util.Stop_Watches is
 
pragma Elaborate_Body;

Known child units

Util.Stop_Watches.Named(package)

Exceptions

Stop_Watch_Error
May be raised by Start or Elapsed.

Type Summary

Stop_Watch
Primitive Operations:  Average, Elapsed, Nof_Timings, Reset, Start, Stop

Other Items:

type Stop_Watch is tagged private;
Tagged for two reasons:
  • I want it to be a pass-by-reference type

  • I want to allow future extensions. One possible extension is to add a name to a stop watch. (See child package Named.)

Any Stop_Watch is initially reset to zero and isn't running.


procedure Reset
  (Watch : in out Stop_Watch);
Stops a running stop watch and resets it to zero.

procedure Start
  (Watch : in out Stop_Watch);
Starts the stop watch. Raises Stop_Watch_Error if the Watch it is already running.

procedure Stop
  (Watch : in out Stop_Watch);
Stops a running stop watch. If the Watch is not running, nothing happens.

function Elapsed
  (Watch : in Stop_Watch)
  return Duration;
Returns the accumulated elapsed time since the last Reset. Raises Stop_Watch_Error if the Watch is running.

function Nof_Timings
  (Watch : in Stop_Watch)
  return Natural;
Returns the number of timings, i.e., the number of calls to Start that didn't raise an exception since the last call to Reset.

function Average
  (Watch : in Stop_Watch)
  return Duration;
Returns Elapsed / Nof_Timings; raises Stop_Watch_Error if Nof_Timings is zero or if the Watch is running.

private

   --  Implementation-defined ...
end Util.Stop_Watches;