User guide (TODO)

Library

Projective transformations

Preprocessing

Reference

Buffering

As mentioned in the section on transformations, you can implement apply! as an inplace version of apply to support buffered transformations. Usually, the result of a regular apply can be used as a buffer. You may write

buffer = apply(tfm, item)
apply!(buffer, tfm, item)

However, for some transformations, a different buffer is needed. Sequence, for example, needs to reuse all intermediate results. That is why the buffer creation can be customized:


Managing the buffers manually quickly becomes tedious. For convenience, this library implements Buffered, a transformation wrapper that will use a buffer internally. btfm = Buffered(tfm) will create a buffer the first time it is applyed and then use it by internally calling apply!.

buffered = Buffered(tfm)
buffer = apply(tfm, item)  # uses apply! internally

Since Buffered only stores one buffer, you may run into problems when using it in a multi-threading context where different threads invalidate the buffer before it can be used. In that case, you can use BufferedThreadsafe, a version of Buffered that keeps a separate buffer for every thread.