-
Notifications
You must be signed in to change notification settings - Fork 3
/
seed.clj
71 lines (55 loc) · 1.57 KB
/
seed.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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
(ns geex.core.seed
(:import [geex ISeed TypedSeed])
(:require [clojure.spec.alpha :as spec]
[bluebell.utils.wip.party :as party]
[bluebell.utils.wip.core :as utils]
[bluebell.utils.wip.tag.core :as tg]
[bluebell.utils.wip.java :refer [set-field]]))
(def seed? (partial instance? ISeed))
;; The dependencies of a seed
(defn access-deps [x]
{:pre [(seed? x)]}
(.deps x))
(defn typed-seed? [x]
(instance? TypedSeed x))
(defn compilable-seed?
"A seed that can be compiled"
[x]
(and (seed? x)
(not (typed-seed? x))))
(defn only-numeric-keys [m]
(filter (fn [[k v]] (number? k)) m))
(def access-indexed-map
(party/wrap-accessor
{:desc "access-indexed-map"
:getter (fn [x] (mapv second (sort-by first (only-numeric-keys x))))
:setter (fn [x y] (merge x (zipmap (range (count y)) y)))}))
(defn access-compiled-indexed-deps
([seed]
{:pre [(instance? ISeed seed)]}
(.compilationResultsToArray (.deps seed))))
(defn datatype [^ISeed x]
{:pre [(seed? x)]}
(.getType x))
(defn description [x]
(.getDescription x))
(defn typed-seed [tp]
(TypedSeed. tp))
(defn strip-seed [seed]
(typed-seed (datatype seed)))
(defn access-compiled-deps [sd]
{:pre [(seed? sd)]}
(.getCompilationResults (.deps sd)))
(defn access-seed-data [x]
{:pre [(seed? x)]}
(.getData x))
(defn compilation-result
([state x]
(.setCompilationResult state x)
state)
([state]
(.getCompilationResult state)))
(defn set-seed-type! [seed new-type]
(let [p (.getParams seed)]
(set-field p type new-type)
seed))