|
6 | 6 | [manifold.executor :as ex]
|
7 | 7 | [clojure.string :as str]
|
8 | 8 | [manifold.utils :refer [definterface+]]
|
9 |
| - [potemkin.types :refer [defprotocol+]]) |
| 9 | + [potemkin.types :refer [defprotocol+]] |
| 10 | + [clj-commons.primitive-math :as p]) |
10 | 11 | (:import
|
11 | 12 | [java.util
|
12 | 13 | Calendar
|
|
23 | 24 | (defn nanoseconds
|
24 | 25 | "Converts nanoseconds -> milliseconds"
|
25 | 26 | [^double n]
|
26 |
| - (/ n 1e6)) |
| 27 | + (p// n 1e6)) |
27 | 28 |
|
28 | 29 | (defn microseconds
|
29 | 30 | "Converts microseconds -> milliseconds"
|
30 | 31 | [^double n]
|
31 |
| - (/ n 1e3)) |
| 32 | + (p// n 1e3)) |
32 | 33 |
|
33 | 34 | (defn milliseconds
|
34 | 35 | "Converts milliseconds -> milliseconds"
|
|
38 | 39 | (defn seconds
|
39 | 40 | "Converts seconds -> milliseconds"
|
40 | 41 | [^double n]
|
41 |
| - (* n 1e3)) |
| 42 | + (p/* n 1e3)) |
42 | 43 |
|
43 | 44 | (defn minutes
|
44 | 45 | "Converts minutes -> milliseconds"
|
45 | 46 | [^double n]
|
46 |
| - (* n 6e4)) |
| 47 | + (p/* n 6e4)) |
47 | 48 |
|
48 | 49 | (defn hours
|
49 | 50 | "Converts hours -> milliseconds"
|
50 | 51 | [^double n]
|
51 |
| - (* n 36e5)) |
| 52 | + (p/* n 36e5)) |
52 | 53 |
|
53 | 54 | (defn days
|
54 | 55 | "Converts days -> milliseconds"
|
55 | 56 | [^double n]
|
56 |
| - (* n 864e5)) |
| 57 | + (p/* n 864e5)) |
57 | 58 |
|
58 | 59 | (defn hz
|
59 | 60 | "Converts frequency -> period in milliseconds"
|
60 | 61 | [^double n]
|
61 |
| - (/ 1e3 n)) |
| 62 | + (p// 1e3 n)) |
62 | 63 |
|
63 | 64 | (let [intervals (partition 2 ["d" (days 1)
|
64 | 65 | "h" (hours 1)
|
|
75 | 76 | "0s"
|
76 | 77 | (str/trim s))
|
77 | 78 | (let [[desc ^double val] (first intervals)]
|
78 |
| - (if (>= n val) |
| 79 | + (if (p/>= n val) |
79 | 80 | (recur
|
80 |
| - (str s (int (/ n val)) desc " ") |
| 81 | + (str s (int (p// n val)) desc " ") |
81 | 82 | (rem n val)
|
82 | 83 | (rest intervals))
|
83 | 84 | (recur s n (rest intervals))))))))
|
|
161 | 162 | (defn scheduled-executor->clock [^ScheduledExecutorService e]
|
162 | 163 | (reify IClock
|
163 | 164 | (in [_ interval-millis f]
|
164 |
| - (let [^Future scheduled-future (.schedule e f (long (* interval-millis 1e3)) TimeUnit/MICROSECONDS) |
| 165 | + (let [^Future scheduled-future (.schedule e f (long (p/* interval-millis 1e3)) TimeUnit/MICROSECONDS) |
165 | 166 | cancel-fn (fn []
|
166 | 167 | (.cancel scheduled-future false))]
|
167 | 168 | cancel-fn))
|
|
173 | 174 | (deliver future-ref
|
174 | 175 | (.scheduleAtFixedRate e
|
175 | 176 | ^Runnable (cancel-on-exception f cancel-fn)
|
176 |
| - (long (* delay-millis 1e3)) |
177 |
| - (long (* period-millis 1e3)) |
| 177 | + (long (p/* delay-millis 1e3)) |
| 178 | + (long (p/* period-millis 1e3)) |
178 | 179 | TimeUnit/MICROSECONDS))
|
179 | 180 | cancel-fn))))
|
180 | 181 |
|
|
190 | 191 | (reify
|
191 | 192 | IClock
|
192 | 193 | (in [this interval-millis f]
|
193 |
| - (swap! events update-in [(+ ^double @now interval-millis)] #(conj (or % []) f)) |
| 194 | + (swap! events update-in [(p/+ ^double @now interval-millis)] #(conj (or % []) f)) |
194 | 195 | (advance this 0))
|
195 | 196 | (every [this delay-millis period-millis f]
|
196 |
| - (assert (< 0 period-millis)) |
| 197 | + (assert (p/< 0.0 period-millis)) |
197 | 198 | (let [period (atom period-millis)
|
198 | 199 | cancel-fn #(reset! period -1)]
|
199 | 200 | (->> (with-meta (cancel-on-exception f cancel-fn) {::period period})
|
200 |
| - (.in this (max 0 delay-millis))) |
| 201 | + (.in this (p/max 0.0 delay-millis))) |
201 | 202 | cancel-fn))
|
202 | 203 |
|
203 | 204 | IMockClock
|
|
207 | 208 | (let [limit (+ ^double @now ^double time)]
|
208 | 209 | (loop []
|
209 | 210 | (if (or (empty? @events)
|
210 |
| - (< limit ^double (key (first @events)))) |
| 211 | + (p/< limit ^double (key (first @events)))) |
211 | 212 | (do
|
212 | 213 | (reset! now limit)
|
213 | 214 | nil)
|
|
217 | 218 | (reset! now t)
|
218 | 219 | (doseq [f fs]
|
219 | 220 | (let [period (some-> f meta ::period deref)]
|
220 |
| - (when (or (nil? period) (pos? ^double period)) |
| 221 | + (when (or (nil? period) (p/< 0.0 ^double period)) |
221 | 222 | (try
|
222 | 223 | (f)
|
223 | 224 | (when period (.in this period f))
|
|
281 | 282 | "Schedules no-arg function `f` to be invoked at `timestamp`, which is the milliseconds
|
282 | 283 | since the epoch. Returns a deferred representing the returned value of the function
|
283 | 284 | (unwrapped if `f` itself returns a deferred)."
|
284 |
| - [^double timestamp f] |
285 |
| - (in (max 0 (- timestamp (System/currentTimeMillis))) f)) |
| 285 | + [^long timestamp f] |
| 286 | + (in (p/max 0 (p/- timestamp (System/currentTimeMillis))) f)) |
0 commit comments