|
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