diff --git a/src/hottub/timeline.clj b/src/hottub/timeline.clj index d0447aa..dc09ec6 100644 --- a/src/hottub/timeline.clj +++ b/src/hottub/timeline.clj @@ -20,3 +20,22 @@ (defn timeline-last-value [tln] (last (second (last tln)))) + +(defn- distance [tln a b] + (let [d (.compare (.comp tln) a b)] + (if (neg? d) (- d) d))) + +(defn time-nearest [tln clock] + (let [akv (first (rsubseq tln <= clock)) + bkv (first (subseq tln >= clock))] + (if-not akv + (if-not bkv + nil + (key bkv)) + (if-not bkv + (key akv) + (let [a (key akv) + b (key bkv) + da (distance tln clock a) + db (distance tln clock b)] + (if (<= da db) a b))))))