MultiStepper

typeremoved v1.9.562added v0.0-2301Edit
(MultiStepper. xform iters nexts)

Source code @ clojurescript:src/main/cljs/cljs/core.cljs
(deftype MultiStepper [xform iters nexts]
  Object
  (hasNext [_]
    (loop [iters (seq iters)]
      (if-not (nil? iters)
        (let [iter (first iters)]
          (if-not ^boolean (.hasNext iter)
            false
            (recur (next iters))))
        true)))
  (next [_]
    (dotimes [i (alength iters)]
      (aset nexts i (.next (aget iters i))))
    (prim-seq nexts 0))
  (step [this lt]
    (loop []
      (if (and (not (nil? (.-stepper lt)))
               (.hasNext this))
        (if (reduced? (apply xform (cons lt (.next this))))
          (when-not (nil? (.-rest lt))
            (set! (.. lt -rest -stepper) nil))
          (recur))))
    (when-not (nil? (.-stepper lt))
      (xform lt))))