ham-fisted.iterator

Generialized efficient pathways involving iterators.

->iterator

(->iterator item)

Convert a stream, supplier, or an iterable into an iterator.

ary-iter

(ary-iter ary-data)

Create an iterator for any primitive or object java array.

blocking-queue->iterable

(blocking-queue->iterable queue term-symbol)(blocking-queue->iterable queue timeout-us timeout-symbol term-symbol)

Given a blocking queue return an iterable that iterates until queue returns term-symbol. Uses take to block indefinitely -- will throw any throwable that comes out of the queue.

const-iterable

(const-iterable arg)

Return an iterable that always returns a arg.

ctx-iter

(ctx-iter valid? init-fn update-fn val-fn)

current-iterator

(current-iterator item)

Return a current iterator - and iterator that retains the current object. This iterator is positioned just before the first object so it's current item is nil.

doiter

macro

(doiter varname iterable & body)

Execute body for every item in the iterable. Expecting side effects, returns nil.

has-next?

(has-next? iter)

Given an iterator or nil return true if the iterator has next.

iter-cons

(iter-cons vv iter)

Produce a new iterator that points to vv then defers to passed in iterator.

iter-take

(iter-take n coll)

take n from an iterator returning a new iterator

iter-take-while

(iter-take-while pred iter)

Returns {:data :rest*} where rest* resolves to an iterator once data has been completely consumed.

iterable

(iterable valid? init-fn update-fn val-fn)(iterable init-fn update-fn)

Create an iterable. init-fn is not called until the first has-next call.

  • valid? - ctx->boolean - defaults to non-nil?
  • init-fn - creates new ctx
  • update-fn - function from ctx->ctx
  • val-fn - function from ctx->val - defaults to deref

linear-merge-iterator

(linear-merge-iterator cmp p iterators)(linear-merge-iterator cmp iterators)(linear-merge-iterator iterators)

Create a merging iterator - fast for N < 8.

maybe-next

(maybe-next iter)

Given an iterator or nil return the next element if the iterator hasNext.

merge-iterable

(merge-iterable cmp iterables)

Create an efficient stable n-way merge between a sequence of iterables using comparator. If iterables themselves are sorted result will be sorted. If two items tie then the one from the leftmost iterable wins.

next

(next iter)

Given an iterator call next.

non-nil?

(non-nil? a)

once-iterable

(once-iterable valid? init-fn update-fn val-fn)(once-iterable valid? init-fn)(once-iterable init-fn)

Create an iterable that can only be iterated once - it always returns the same (non threadsafe) iterator every iterator call. init-fn is not called until the first has-next call - also see iterable.

The arguments have different defaults as once-iterables can close over global context on construction as they can only be iterated once.

  • valid? - ctx->boolean - defaults to non-nil?
  • init-fn - creates new ctx
  • update-fn - function from ctx->ctx - defaults to init-fn ignoring argument.
  • val-fn - function from ctx->val - defaults to identity

seq-iterable

(seq-iterable iterable)

Iterable with efficient reduce but also contains a cached seq conversion so patterns like: (when (seq v) ...) still work without needing to dereference the iterable twice.

seq-once-iterable

(seq-once-iterable valid? init update val-fn)(seq-once-iterable valid? init)(seq-once-iterable init)

unstable-merge-iterable

(unstable-merge-iterable cmp iterables)

Create an efficient n-way merge between a sequence of iterables using comparator. If iterables themselves are sorted result will be sorted.

wrap-iter

(wrap-iter iter)

Wrap an iterator returning an iterable.