module Tools: sig end
Collection of useful functions used throughout ICS.
Author(s): Jean-Christophe Filliatre, Harald Ruess
val linenumber : int Pervasives.ref
linenumber
used by lexer and parser.
val profiling : bool Pervasives.ref
val add_at_exit : (unit -> unit) -> unit
Procedures f
without parameters can be registered as exit procedures
by add_to_exit f
. Exit procedures can, for example be used for
displaying statistics after running ICS.
val do_at_exit : unit -> unit
Procedures
f
registered by
Tools.add_at_exit
are called
by
do_at_exit()
. The order in which these functions are called is
unspecified.
val add_at_reset : (unit -> unit) -> unit
add_to_reset f
registers f
as a reset procedure
val do_at_reset : unit -> unit
do_at_reset()
. which are then called, one-by-one, by do_at_reset()
.
val utime : ('a -> 'b) -> 'a -> 'b * float
utime f a
returns not only the result of applying f
to a
but also the time required to compute the function.
val profile : string -> ('a -> 'b) -> 'a -> 'b
profile str f
profiles function f
, and
registers an exit function which outputs the number of calls
of this function, and the total time spent in this function;
the argument str
is usually just the name of the function.
Parameters: |
str |
: |
string
|
f |
: |
'a -> 'b
|
a |
: |
'a
|
|
Accumulation of side effects
|
val acc1 : 'a list Pervasives.ref -> ('b -> 'c * 'a) -> 'b -> 'c
acc1 acc f b
calls f b
to obtain (c, a)
.
Now, a
is consed to acc
as a side effect
and the result c
is returned.
Parameters: |
acc |
: |
'a list Pervasives.ref
|
f |
: |
'b -> 'c * 'a
|
a |
: |
'b
|
|
val acc2 : 'a list Pervasives.ref -> ('b -> 'c -> 'd * 'a) -> 'b -> 'c -> 'd
acc2 acc f b1 b2
calls f b1 b2
to obtain (c, a)
.
Now, a
is consed to acc
as a side effect and the result c
is returned.
Parameters: |
acc |
: |
'a list Pervasives.ref
|
f |
: |
'b -> 'c -> 'd * 'a
|
a1 |
: |
'b
|
a2 |
: |
'c
|
|
val accb : 'a list Pervasives.ref -> ('b -> 'a option) -> 'b -> bool
accb acc p b
calls p b
. If the result of evaluating
p b
is of the form Some(a)
, then a
is consed to acc
as a side effect and the result true
is returned. Otherwise,
if p b
is None
, there is no side effect, and false
is returned.
Parameters: |
acc |
: |
'a list Pervasives.ref
|
p |
: |
'b -> 'a option
|
a |
: |
'b
|
|