diff options
| author | Jake Zerrer <him@jakezerrer.com> | 2025-11-26 09:02:27 -0500 |
|---|---|---|
| committer | Jake Zerrer <him@jakezerrer.com> | 2025-11-26 13:10:08 -0500 |
| commit | f7410a781fa7c7c2584c43ffe9fefb81815dd82c (patch) | |
| tree | aa2c6bacb16a01f0d063a7c09bf0523fb9712e7c /src | |
| parent | 076288da762787ae2874204c5212df8571ff4564 (diff) | |
Update time-object to use new interval tree impl
Diffstat (limited to 'src')
| -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)) |
