diff options
Diffstat (limited to 'src/unheard/time_object.clj')
| -rw-r--r-- | src/unheard/time_object.clj | 24 |
1 files changed, 14 insertions, 10 deletions
diff --git a/src/unheard/time_object.clj b/src/unheard/time_object.clj index eea950b..89070f6 100644 --- a/src/unheard/time_object.clj +++ b/src/unheard/time_object.clj @@ -1,5 +1,6 @@ (ns unheard.time-object (:require [missionary.core :as m] + [unheard.interval :as i] [helins.interval.map :as imap])) ;; TODO: Update description @@ -41,31 +42,34 @@ "Primary timeline bookkeeping mehanism." [phrase] (let [{:keys [time-objects]} (phrase 0) - m imap/empty] + c (i/create-ratio-interval-collection)] (if (seq? time-objects) - (loop [time-objects time-objects - m m] + (loop [time-objects time-objects] (let [{:keys [start duration value]} (first time-objects) - m (imap/mark m start (+ start duration) value) rem (rest time-objects)] - (if (seq rem) (recur rem m) m))) - m))) + (.add c (i/ratio-interval start (+ start duration) value)) + (if (seq rem) (recur rem) c))) + c))) (comment (def t (timeline a)) (def t (timeline c)) - (get t 1)) + (i/find-overlaps t (i/ratio-interval 0 1 nil)) + (i/find-overlaps t (i/ratio-interval -1 0 nil))) (defn point-query "Query a timeline. Returns a flow of time objects." [timeline >at] - (m/stream (m/ap (let [at (m/?< >at)] (get timeline at))))) - + (m/stream (m/ap (let [at (m/?< >at)] + (into #{} + (map #(.value %) + (i/find-overlaps timeline + (i/ratio-interval at at nil)))))))) (comment (def at (atom 0)) (def >at (m/watch at)) (def cancel ((m/reduce prn nil (point-query t >at)) prn prn)) - (reset! at 1) + (reset! at 5) (reset! at 14) (cancel)) |
