implement optimized extremes protocols and fastempty for IPersistentVector rather than PersistentVector

This commit is contained in:
Nathan Marz 2016-06-01 12:33:10 -04:00
parent d8473993c4
commit 39a3755b49

View file

@ -457,15 +457,15 @@
(append (butlast l) (afn (last l)))) (append (butlast l) (afn (last l))))
#+clj #+clj
(defn vec-count [^clojure.lang.PersistentVector v] (defn vec-count [^clojure.lang.IPersistentVector v]
(.count v)) (.length v))
#+cljs #+cljs
(defn vec-count [v] (defn vec-count [v]
(count v)) (count v))
(extend-protocol UpdateExtremes (extend-protocol UpdateExtremes
#+clj clojure.lang.PersistentVector #+cljs cljs.core/PersistentVector #+clj clojure.lang.IPersistentVector #+cljs cljs.core/PersistentVector
(update-first [v afn] (update-first [v afn]
(let [val (get v 0)] (let [val (get v 0)]
(assoc v 0 (afn val)) (assoc v 0 (afn val))
@ -485,7 +485,7 @@
)) ))
(extend-protocol GetExtremes (extend-protocol GetExtremes
#+clj clojure.lang.PersistentVector #+cljs cljs.core/PersistentVector #+clj clojure.lang.IPersistentVector #+cljs cljs.core/PersistentVector
(get-first [v] (get-first [v]
(get v 0)) (get v 0))
(get-last [v] (get-last [v]
@ -499,7 +499,7 @@
(extend-protocol FastEmpty (extend-protocol FastEmpty
#+clj clojure.lang.PersistentVector #+cljs cljs.core/PersistentVector #+clj clojure.lang.IPersistentVector #+cljs cljs.core/PersistentVector
(fast-empty? [v] (fast-empty? [v]
(= 0 (vec-count v))) (= 0 (vec-count v)))
#+clj Object #+cljs default #+clj Object #+cljs default