The "length" is the length of the OUTPUT array, the output length is NOT divided by the increment/stride.If increment is not defined, then it defaults to one. (Increment, if defined, must be >= 1). If length is not defined, then it defaults to a length of one also (i.e. just the pixel "start"). If start is also undefined, then all pixels along this axis are chosen. This class deprecates the "_" (IndexRange) class, which had a failed syntax and used (start,end,increment) which is generally less convenient. Some simple examples follow:
Vector<Int> vi(100); // Vector of length 100; //... // Copy odd values onto even values vi(Slice(0,50,2)) = vi(Slice(1,50,2)); Matrix<float> mf(100,50), smallMf; smallMf.reference(mf(Slice(0,10,10), Slice(0,5,10))); // smallMF is now a "dezoomed" (every 10th pix) // refference to mf. Of course we could also // make it a copy by using assignment; e.g: smallMf.resize(0,0); // Make it so it will "size to fit" smallMf = mf(Slice(0,10,10), Slice(0,5,10));As shown above, normally Slices will normally be used as temporaries, but they may also be put into variables if desired (the default copy constructors and assignment operators suffice for this class).
While it will be unusual for a user to want this, a zero-length slice is allowable.
Another way to produce a slice from any of the Array classes is to use
SomeArray(blc,trc,inc) where blc,trc,inc are IPositions. This is described
in the documentation for Array
Member Description
Slice()
The entire range of indices on the axis is desired.
Slice(Int Start, uInt Length=1, uInt Inc=1)
Create a Slice with a given start, length, and increment. The latter
two default to one if not given.
Bool all() const
Was the entire range of indices on this axis selected?
Int start() const
Report the selected starting position. If all() is true,
start=len=inc=0 is set.
uInt length() const
Report the defined length. If all() is true, start=len=inc=0 is set.
uInt inc() const
Report the defined increment. If all() is true, start=len=inc=0 is set.
Int end() const
Attempt to report the last element of the slice. If all() is
True, end() returns -1 (which is less than start(), which returns
zero in that case).