-
Notifications
You must be signed in to change notification settings - Fork 0
/
helper.clj
46 lines (31 loc) · 1.19 KB
/
helper.clj
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
(ns lambdaroyal.memory.helper
(:require [clojure.tools.logging :as log])
(:gen-class))
(def log-count (atom 0))
(defmacro timed [form]
"evaluates parameter form to obj and gives back the tuple (delay obj) where delay denotes the floating point number of ms needed to eval the form"
(let [start (gensym "start")
obj (gensym "obj")
delay (gensym "delay")]
`(let [~start (. java.lang.System (clojure.core/nanoTime))
~obj ~form
~delay (clojure.core//
(clojure.core/double
(clojure.core/- (. java.lang.System (clojure.core/nanoTime))
~start)) 1000000.0)]
(list ~delay ~obj))))
(defmacro futures [n & exprs]
(vec (for [_ (range n)
expr exprs]
`(future ~expr))))
(defmacro wait-futures [& args]
`(doseq [f# (futures ~@args)] @f#))
(defmacro log-info-timed [msg form]
(let [c (gensym "c")
_ (gensym "_")
t (gensym "t")]
`(let [~c (swap! log-count inc)
~_ (println (format "[START %d] %s" ~c ~msg))
~t (timed ~form)
~_ (println (format "[STOP %d (ms) %f] %s" ~c (first ~t) ~msg))]
(last ~t))))