summaryrefslogtreecommitdiff
path: root/src/unheard/time_object.clj
diff options
context:
space:
mode:
authorJake Zerrer <him@jakezerrer.com>2025-11-26 09:02:27 -0500
committerJake Zerrer <him@jakezerrer.com>2025-11-26 13:10:08 -0500
commitf7410a781fa7c7c2584c43ffe9fefb81815dd82c (patch)
treeaa2c6bacb16a01f0d063a7c09bf0523fb9712e7c /src/unheard/time_object.clj
parent076288da762787ae2874204c5212df8571ff4564 (diff)
Update time-object to use new interval tree impl
Diffstat (limited to 'src/unheard/time_object.clj')
-rw-r--r--src/unheard/time_object.clj24
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))