struct
#include <diplib.h>
Range Used in indexing to indicate a regular subset of pixels along one image dimension.
Contents
dip::Range{ start, stop }
generates a range of pixels where start
and stop
are the first and last indices in the range. That is, stop
is included in the range. dip::Range{ start }
generates a range for a single pixel. For example, dip::Range{ 0 }
is the first pixel, and is equivalent to dip::Range{ 0, 0 }
. dip::Range{ 0, N-1 }
is a range of the first N pixels.
dip::Range{ start, stop, step }
generates a range of pixels where step
is the number of pixels between subsequent indices. The pixels indexed are the ones generated by the following loop:
offset = start; do { // use this offset offset += step; } while( offset <= stop );
That is, it is possible that the range does not include stop
, if the step
would make the range step over stop
.
Negative start
and stop
values indicate offset from the end (-1 is the last pixel, -2 the second to last, etc.): dip::Range{ 5, -6 }
indicates a range that skips the first and last five pixels. dip::Range{ -1, -1, 1 }
(or simply dip::Range{ -1 }
indicates the last pixel only.
dip::Range{ 0, -1 }
is equivalent to dip::Range{}
, and indicates all pixels.
The dip::
method converts the negative start
and stop
values to actual offsets:
dip::Range r{ 5, -6 }; r.fix( 50 ); // now r.stop == 50 - 6
If stop
comes before start
, then the range generates pixel indices in the reverse order. That is, negative steps are taken to go from start
to stop
. step
is always a positive integer, the direction of the steps is given solely by the ordering of start
and stop
.
The begin
and end
methods yield an iterator that dereferences to the indices defined by the range.
Public types
- class Iterator
- An iterator for the range.
Constructors, destructors, conversion operators
- Range() defaulted
- Create a range that indicates all pixels.
-
Range(dip::
sint i) explicit - Create a range that indicates a single pixel.
-
Range(dip::
sint i, dip:: sint j, dip:: uint s = 1) - Create a range using two or three values; it indicates all pixels between
i
andj
, both inclusive. The step size defaults to 1.
Public functions
-
void Fix(dip::
uint size) - Modify a range so that negative values are assigned correct values according to the given size. Throws if the range falls out of bounds.
-
auto Size() const -> dip::
uint - Get the number of pixels addressed by the range (must be fixed first!).
-
auto Offset() const -> dip::
uint - Get the offset for the range (must be fixed first!).
-
auto Last() const -> dip::
uint - Get the last index in the range (must be fixed first!).
-
auto Step() const -> dip::
sint - Get the signed step size for the range (must be fixed first!).
- auto begin() const -> Iterator
- Get an iterator to the beginning of the range (must be fixed first!).
- auto end() const -> Iterator
- Get an iterator to the end of the range (must be fixed first!).