[m-rev.] for review: add function time__clk_tck/0

Fergus Henderson fjh at cs.mu.OZ.AU
Wed Jan 8 21:18:13 AEDT 2003


That looks good, thanks.

On 08-Jan-2003, David Overton <dmo at cs.mu.OZ.AU> wrote:
> 
> Estimated hours taken: 0.5
> Branches: main
> 
> library/time.m
> 	Add a function `time__clk_tck/0' for obtaining the "ticks per second"
> 	ratio that should be used for converting the output of `time__times/4'
> 	to seconds.  The ratio is obtained from `sysconf(_SC_CLK_TCK)' or from
> 	the `CLK_TCK' macro.
> 
> 	Add some comments to clarify the difference between the values returned
> 	by `time__clock' and `time__times'.
> 
> Index: time.m
> ===================================================================
> RCS file: /home/mercury1/repository/mercury/library/time.m,v
> retrieving revision 1.29
> diff -u -r1.29 time.m
> --- time.m	24 Sep 2002 06:55:19 -0000	1.29
> +++ time.m	8 Jan 2003 05:40:13 -0000
> @@ -23,6 +23,9 @@
>  :- import_module std_util.
>  
>  	% The `clock_t' type represents times measured in clock ticks.
> +	% NOTE: the unit used for a value of this type depends on whether it was
> +	% returned by `time__clock' or `time__times'.  See the comments on these
> +	% predicates below.
>  :- type clock_t == int.
>  
>  	% The `tms' type holds information about the amount of processor
> @@ -73,15 +76,21 @@
>  	%	within a single process.
>  	%	If the time cannot be obtained, this procedure
>  	%	will throw a time_error exception.
> +	%	To obtain a time in seconds, divide Result by
> +	%	`time__clocks_per_sec'.
>  	% 
>  :- pred time__clock(clock_t, io__state, io__state).
>  :- mode time__clock(out, di, uo) is det.
>  
>  	% time__clocks_per_sec:
> -	%	Returns the number of clock ticks per second.
> +	%	Returns the number of "clocks" per second as defined by
> +	%	CLOCKS_PER_SEC.  A `clock_t' value returned by `time__clock' can
> +	%	be divided by this value to obtain a time in seconds.
>  	%
>  :- func time__clocks_per_sec = int.
>  
> +%-----------------------------------------------------------------------------%
> +
>  	% time__time(Result, IO_state, IO_state):
>  	%	Returns the current (simple) calendar time.
>  	%	If the time cannot be obtained, this procedure
> @@ -90,11 +99,15 @@
>  :- pred time__time(time_t, io__state, io__state).
>  :- mode time__time(out, di, uo) is det.
>  
> +%-----------------------------------------------------------------------------%
> +
>  	% time__times(ProcessorTime, ElapsedRealTime, IO_state, IO_state)
>  	%	(POSIX)
>  	%	Returns the processor time information in the `tms'
>  	%	value, and the elapsed real time relative to an
>  	%	arbitrary base in the `clock_t' value.
> +	%	To obtain a time in seconds, divide the result by
> +	%	`time__clk_tck'.
>  	%	If the time cannot be obtained, this procedure
>  	%	will throw a time_error exception.
>  	%
> @@ -104,6 +117,17 @@
>  :- pred time__times(tms, clock_t, io__state, io__state).
>  :- mode time__times(out, out, di, uo) is det.
>  
> +	% time__clk_tck:
> +	%	Returns the number of "clock ticks" per second as defined by
> +	%	sysconf(_SC_CLK_TCK).  A `clock_t' value returned by
> +	%	`time__times' can be divided by this value to obtain a time in
> +	%	seconds.
> +	%
> +	%	On non-POSIX systems that do not support this functionality,
> +	%	this procedure may simply always throw an exception.
> +	%
> +:- func time__clk_tck = int.
> +
>  %-----------------------------------------------------------------------------%
>  
>  	% time__difftime(Time1, Time0) = Diff:
> @@ -166,6 +190,9 @@
>  	#ifdef MR_HAVE_SYS_TIMES_H
>  		#include <sys/times.h>
>  	#endif
> +	#ifdef MR_HAVE_UNISTD_H
> +		#include <unistd.h>
> +	#endif
>  
>  	#define MR_update_io(r_src, r_dest)	((r_dest) = (r_src))
>  
> @@ -260,6 +287,32 @@
>  	% matching foreign_proc version.
>  	{ private_builtin__sorry("time__c_times") }.
>  
> +%-----------------------------------------------------------------------------%
> +
> +time__clk_tck = Ret :-
> +	Ret0 = time__c_clk_tck,
> +	( Ret0 = -1 ->
> +		throw(time_error("can't get clk_tck value"))
> +	;
> +		Ret = Ret0
> +	).
> +
> +:- func time__c_clk_tck = int.
> +
> +:- pragma foreign_proc("C", time__c_clk_tck = (Ret::out),
> +		[will_not_call_mercury, promise_pure],
> +"{
> +#if defined(MR_HAVE_SYSCONF) && defined(_SC_CLK_TCK)
> +	Ret = (MR_Integer) sysconf(_SC_CLK_TCK);
> +#elif defined(CLK_TCK)
> +	/*
> +	** If sysconf is not available, try using the (obsolete) macro CLK_TCK.
> +	*/
> +	Ret = (MR_Integer) CLK_TCK;
> +#else
> +	Ret = -1;
> +#endif
> +}").
>  
>  %-----------------------------------------------------------------------------%
>  
> -- 
> David Overton                  Uni of Melbourne     +61 3 8344 1354
> dmo at cs.mu.oz.au                Monash Uni (Clayton) +61 3 9905 5779
> http://www.cs.mu.oz.au/~dmo    Mobile Phone         +61 4 0337 4393
> --------------------------------------------------------------------------
> mercury-reviews mailing list
> post:  mercury-reviews at cs.mu.oz.au
> administrative address: owner-mercury-reviews at cs.mu.oz.au
> unsubscribe: Address: mercury-reviews-request at cs.mu.oz.au Message: unsubscribe
> subscribe:   Address: mercury-reviews-request at cs.mu.oz.au Message: subscribe
> --------------------------------------------------------------------------

-- 
Fergus Henderson <fjh at cs.mu.oz.au>  |  "I have always known that the pursuit
The University of Melbourne         |  of excellence is a lethal habit"
WWW: <http://www.cs.mu.oz.au/~fjh>  |     -- the last words of T. S. Garp.
--------------------------------------------------------------------------
mercury-reviews mailing list
post:  mercury-reviews at cs.mu.oz.au
administrative address: owner-mercury-reviews at cs.mu.oz.au
unsubscribe: Address: mercury-reviews-request at cs.mu.oz.au Message: unsubscribe
subscribe:   Address: mercury-reviews-request at cs.mu.oz.au Message: subscribe
--------------------------------------------------------------------------



More information about the reviews mailing list