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