/**
* The primitive \verb|dtime| returns the CPU time in seconds
* since the last call to \verb|dtime|. Can be used to time
* strategies.
*/
module util/time
imports
system/io/file
util/log
signature
constructors
EpochTime : Int -> EpochTime
ComponentTime : Date * DayTime * ComponentTimeDupl -> ComponentTime
DayTime : Int * Int * Int -> DayTime // Hours, Minutes, Seconds
Date : Int * Month * Int -> Date // Year, DayOfMonth
Dupl : Int * Int -> ComponentTimeDupl // DayOfWeek, DayOfYear
constructors
January : Month
February : Month
March : Month
April : Month
May : Month
June : Month
July : Month
August : Month
September : Month
October : Month
November : Month
December : Month
constructors
Sunday : DayOfWeek
Monday : DayOfWeek
Tuesday : DayOfWeek
Wednesday : DayOfWeek
Thursday : DayOfWeek
Friday : DayOfWeek
Saturday : DayOfWeek
strategies
/**
* Strategy time returns the time since the Epoch (00:00:00 UTC, January 1, 1970),
* measured in seconds. It is an alias of now-epoch-time.
*/
time =
prim("SSL_time")
// :: _ -> EpochTime
now-epoch-time =
prim("SSL_now_epoch_time"); !EpochTime(<id>)
// :: _ -> ComponentTime
now-local-time =
now-epoch-time; epoch2local-time
// :: _ -> ComponentTime
now-UTC =
now-epoch-time; epoch2UTC
// :: EpochTime -> ComponentTime
epoch2local-time =
?EpochTime(t); prim("SSL_epoch2localtime", t); prim-tuple-to-ComponentTime
// :: EpochTime -> ComponentTime
epoch2utc =
?EpochTime(t); prim("SSL_epoch2UTC", t); prim-tuple-to-ComponentTime
epoch2UTC =
?EpochTime(t); prim("SSL_epoch2UTC", t); prim-tuple-to-ComponentTime
// :: ComponentTime -> DayTime
just-day-time =
?ComponentTime(_, <id>, _)
// :: ComponentTime -> Date
just-date =
?ComponentTime(<id>, _, _)
prim-tuple-to-ComponentTime:
(s, mi, h, dm, mo, y, dw, dy)
->
ComponentTime(Date(y, <index2month> mo, dm), DayTime(h, mi, s) , Dupl(<index2day-of-week> dw, dy))
/**
* Translates a day index into the corresponding day constructor. Sunday is the beginning
* of the week, starting with day 0.
*
* E.g.
* <index2day-of-week>0 => Sunday()
* <index2day-of-week>6 => Saturday()
*/
rules
// :: Int -> DayOfWeek
index2day-of-week : 0 -> Sunday()
index2day-of-week : 1 -> Monday()
index2day-of-week : 2 -> Tuesday()
index2day-of-week : 3 -> Wednesday()
index2day-of-week : 4 -> Thursday()
index2day-of-week : 5 -> Friday()
index2day-of-week : 6 -> Saturday()
/**
* Translates a day constructor into the corresponding day index. Sunday is the beginning
* of the week, starting with day 0.
*
* E.g.
* <day-of-week2index>Sunday() => 0
* <day-of-week2index>Wednesday() => 3
*/
rules
// :: DayOfWeek -> Int
day-of-week2index : Sunday() -> 0
day-of-week2index : Monday() -> 1
day-of-week2index : Tuesday() -> 2
day-of-week2index : Wednesday() -> 3
day-of-week2index : Thursday() -> 4
day-of-week2index : Friday() -> 5
day-of-week2index : Saturday() -> 6
/**
* Translates a month constructor into the corresponding month index. The year
* starts with January which has index 0.
*
* E.g.
* <month2index>January() => 0
* <month2index>September() => 8
*/
rules
// :: Month -> Int
month2index : January() -> 0
month2index : February() -> 1
month2index : March() -> 2
month2index : April() -> 3
month2index : May() -> 4
month2index : June() -> 5
month2index : July() -> 6
month2index : August() -> 7
month2index : September() -> 8
month2index : October() -> 9
month2index : November() -> 10
month2index : December() -> 11
/**
* Translates a month index into the corresponding month constructor. The year
* starts with January which has index 0.
*
* E.g.
* <index2month>0 => January()
* <index2month>10 => November()
*/
rules
// :: Int -> Month
index2month : 0 -> January()
index2month : 1 -> February()
index2month : 2 -> March()
index2month : 3 -> April()
index2month : 4 -> May()
index2month : 5 -> June()
index2month : 6 -> July()
index2month : 7 -> August()
index2month : 8 -> September()
index2month : 9 -> October()
index2month : 10 -> November()
index2month : 11 -> December()
strategies
// RELATIVE TIME ; TIME OF PROCESS
clock-to-seconds =
?c; prim("SSL_ClockToSeconds", c)
clock =
prim("SSL_clock")