Currently we mostly iterate buffer areas using x/y loops or through
utility methods extending from base classes.
To simplify code in simple operations this patch adds wrappers for
specifying buffer areas and their iterators for raw buffers with any
element stride:
- BufferRange: Specifies a range of contiguous buffer elements from a given element index.
- BufferRangeIterator: Iterates elements in a BufferRange.
- BufferArea: Specifies a rectangle area of elements in a 2D buffer.
- BufferAreaIterator: Iterates elements in a BufferArea.
- BuffersIterator: Simultaneously iterates an area of elements in an output buffer and any number of input buffers.
- BuffersIteratorBuilder: Helper for building BuffersIterator adding buffers one by one.
For iterating areas coordinates it adds XRange and YRange methods
that return IndexRange.
Examples of use -> P2244