ArrayNodeSeq

typesince v0.0-1211Edit
satisfies ICollection IEmptyableCollection IEquiv IHash IMeta INext IPrintWithWriter IReduce ISeq ISeqable ISequential IWithMeta

(ArrayNodeSeq. meta nodes i s __hash)

Source code @ clojurescript:src/main/cljs/cljs/core.cljs
(deftype ArrayNodeSeq [meta nodes i s ^:mutable __hash]
  Object
  (toString [coll]
    (pr-str* coll))
  (equiv [this other]
    (-equiv this other))
  (indexOf [coll x]
    (-indexOf coll x 0))
  (indexOf [coll x start]
    (-indexOf coll x start))
  (lastIndexOf [coll x]
    (-lastIndexOf coll x (count coll)))
  (lastIndexOf [coll x start]
    (-lastIndexOf coll x start))

  IMeta
  (-meta [coll] meta)

  IWithMeta
  (-with-meta [coll new-meta]
    (if (identical? new-meta meta)
      coll
      (ArrayNodeSeq. new-meta nodes i s __hash)))

  ICollection
  (-conj [coll o] (cons o coll))

  IEmptyableCollection
  (-empty [coll] (.-EMPTY List))

  ISequential
  ISeq
  (-first [coll] (first s))
  (-rest  [coll]
    (let [ret (create-array-node-seq nodes i (next s))]
      (if-not (nil? ret) ret ())))

  INext
  (-next [coll]
    (create-array-node-seq nodes i (next s)))

  ISeqable
  (-seq [this] this)

  IEquiv
  (-equiv [coll other] (equiv-sequential coll other))

  IHash
  (-hash [coll] (caching-hash coll hash-ordered-coll __hash))

  IReduce
  (-reduce [coll f] (seq-reduce f coll))
  (-reduce [coll f start] (seq-reduce f start coll)))