|
22 | 22 |
|
23 | 23 | (defn nanoseconds |
24 | 24 | "Converts nanoseconds -> milliseconds" |
25 | | - [n] |
| 25 | + [^double n] |
26 | 26 | (/ n 1e6)) |
27 | 27 |
|
28 | 28 | (defn microseconds |
29 | 29 | "Converts microseconds -> milliseconds" |
30 | | - [n] |
| 30 | + [^double n] |
31 | 31 | (/ n 1e3)) |
32 | 32 |
|
33 | 33 | (defn milliseconds |
34 | 34 | "Converts milliseconds -> milliseconds" |
35 | | - [n] |
| 35 | + [^double n] |
36 | 36 | n) |
37 | 37 |
|
38 | 38 | (defn seconds |
39 | 39 | "Converts seconds -> milliseconds" |
40 | | - [n] |
| 40 | + [^double n] |
41 | 41 | (* n 1e3)) |
42 | 42 |
|
43 | 43 | (defn minutes |
44 | 44 | "Converts minutes -> milliseconds" |
45 | | - [n] |
| 45 | + [^double n] |
46 | 46 | (* n 6e4)) |
47 | 47 |
|
48 | 48 | (defn hours |
49 | 49 | "Converts hours -> milliseconds" |
50 | | - [n] |
| 50 | + [^double n] |
51 | 51 | (* n 36e5)) |
52 | 52 |
|
53 | 53 | (defn days |
54 | 54 | "Converts days -> milliseconds" |
55 | | - [n] |
| 55 | + [^double n] |
56 | 56 | (* n 864e5)) |
57 | 57 |
|
58 | 58 | (defn hz |
59 | 59 | "Converts frequency -> period in milliseconds" |
60 | | - [n] |
| 60 | + [^double n] |
61 | 61 | (/ 1e3 n)) |
62 | 62 |
|
63 | 63 | (let [intervals (partition 2 ["d" (days 1) |
|
68 | 68 | (defn format-duration |
69 | 69 | "Takes a duration in milliseconds, and returns a formatted string |
70 | 70 | describing the interval, i.e. '5d 3h 1m'" |
71 | | - [n] |
| 71 | + [^double n] |
72 | 72 | (loop [s "", n n, intervals intervals] |
73 | 73 | (if (empty? intervals) |
74 | 74 | (if (empty? s) |
75 | 75 | "0s" |
76 | 76 | (str/trim s)) |
77 | | - (let [[desc val] (first intervals)] |
| 77 | + (let [[desc ^double val] (first intervals)] |
78 | 78 | (if (>= n val) |
79 | 79 | (recur |
80 | 80 | (str s (int (/ n val)) desc " ") |
|
184 | 184 | default, the initial time is `0`." |
185 | 185 | ([] |
186 | 186 | (mock-clock 0)) |
187 | | - ([initial-time] |
| 187 | + ([^double initial-time] |
188 | 188 | (let [now (atom initial-time) |
189 | 189 | events (atom (sorted-map))] |
190 | 190 | (reify |
191 | 191 | IClock |
192 | 192 | (in [this interval-millis f] |
193 | | - (swap! events update-in [(+ @now interval-millis)] #(conj (or % []) f)) |
| 193 | + (swap! events update-in [(+ ^double @now interval-millis)] #(conj (or % []) f)) |
194 | 194 | (advance this 0)) |
195 | 195 | (every [this delay-millis period-millis f] |
196 | 196 | (assert (< 0 period-millis)) |
|
204 | 204 | (now [_] @now) |
205 | 205 | (advance |
206 | 206 | [this time] |
207 | | - (let [limit (+ @now time)] |
| 207 | + (let [limit (+ ^double @now ^double time)] |
208 | 208 | (loop [] |
209 | 209 | (if (or (empty? @events) |
210 | | - (< limit (key (first @events)))) |
| 210 | + (< limit ^double (key (first @events)))) |
211 | 211 | (do |
212 | 212 | (reset! now limit) |
213 | 213 | nil) |
|
217 | 217 | (reset! now t) |
218 | 218 | (doseq [f fs] |
219 | 219 | (let [period (some-> f meta ::period deref)] |
220 | | - (when (or (nil? period) (pos? period)) |
| 220 | + (when (or (nil? period) (pos? ^double period)) |
221 | 221 | (try |
222 | 222 | (f) |
223 | 223 | (when period (.in this period f)) |
|
281 | 281 | "Schedules no-arg function `f` to be invoked at `timestamp`, which is the milliseconds |
282 | 282 | since the epoch. Returns a deferred representing the returned value of the function |
283 | 283 | (unwrapped if `f` itself returns a deferred)." |
284 | | - [timestamp f] |
| 284 | + [^double timestamp f] |
285 | 285 | (in (max 0 (- timestamp (System/currentTimeMillis))) f)) |
0 commit comments