casa  $Rev:20696$
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines
Public Member Functions | Static Public Member Functions | Private Attributes
casa::Slice Class Reference

define a (start,length,increment) along an axis More...

#include <Slice.h>

List of all members.

Public Member Functions

 Slice ()
 The entire range of indices on the axis is desired.
 Slice (size_t Start, size_t Length=1, size_t Inc=1)
 Create a Slice with a given start, length, and increment.
 Slice (size_t Start, size_t End, size_t Inc, Bool endIsLength)
 Create a Slice with a given start, end or length, and increment.
Bool all () const
 Was the entire range of indices on this axis selected?
size_t start () const
 Report the selected starting position.
size_t length () const
 Report the defined length.
size_t inc () const
 Report the defined increment.
size_t end () const
 Attempt to report the last element of the slice.

Static Public Member Functions

static IPosition checkSlices (Vector< Vector< Slice > > &slices, Slicer &first, const IPosition &shape)
 Check a vector of slices.

Private Attributes

size_t startp
ssize_t incp
size_t lengthp

Detailed Description

define a (start,length,increment) along an axis

Review Status

Reviewed By:
UNKNOWN
Date Reviewed:
before2004/08/25
<h3>Synopsis</h3>
A "slice" (aka Section) is a a regular sub-Array (and ultimately sub-Image)
that is defined by defining a (start,length,increment) for each axis in
the array. That is, the output array's axis is of size "length", and the
elements are sampled by stepping along the input array in strides of 
"increment".
<br><strong>Warning:</strong><em>  
  The "length" is the length of the OUTPUT array, the output length
       is NOT divided by the increment/stride;
</em><br>
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<T>.

Definition at line 93 of file Slice.h.


Constructor & Destructor Documentation

casa::Slice::Slice ( ) [inline]

The entire range of indices on the axis is desired.

Nothing

Definition at line 140 of file Slice.h.

casa::Slice::Slice ( size_t  Start,
size_t  Length = 1,
size_t  Inc = 1 
) [inline]

Create a Slice with a given start, length, and increment.

The latter two default to one if not given.

Definition at line 146 of file Slice.h.

References DebugAssert, and incp.

casa::Slice::Slice ( size_t  Start,
size_t  End,
size_t  Inc,
Bool  endIsLength 
) [inline]

Create a Slice with a given start, end or length, and increment.

If endIsLength=False, end is interpreted as length.

Definition at line 155 of file Slice.h.

References DebugAssert, and incp.


Member Function Documentation

Bool casa::Slice::all ( ) const [inline]

Was the entire range of indices on this axis selected?

Definition at line 164 of file Slice.h.

References incp.

Referenced by inc().

static IPosition casa::Slice::checkSlices ( Vector< Vector< Slice > > &  slices,
Slicer first,
const IPosition shape 
) [static]

Check a vector of slices.

If a vector of an axis is empty or missing, it is replaced by a Slice representing the entire axis. It checks if the Slices do not exceed the array shape. It returns the shape of the combined slices and fills the Slicer for the first array part defined by the slices.

size_t casa::Slice::end ( ) const [inline]

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).

return -1 if all()

Definition at line 188 of file Slice.h.

References lengthp, and startp.

size_t casa::Slice::inc ( ) const [inline]

Report the defined increment.

If all() is true, start=len=inc=0 is set.

Definition at line 179 of file Slice.h.

References all(), and incp.

size_t casa::Slice::length ( ) const [inline]

Report the defined length.

If all() is true, start=len=inc=0 is set.

Definition at line 174 of file Slice.h.

References lengthp.

size_t casa::Slice::start ( ) const [inline]

Report the selected starting position.

If all() is true, start=len=inc=0 is set.

Definition at line 169 of file Slice.h.

References startp.


Member Data Documentation

ssize_t casa::Slice::incp [private]

Definition at line 136 of file Slice.h.

Referenced by all(), inc(), and Slice().

size_t casa::Slice::lengthp [private]

Definition at line 137 of file Slice.h.

Referenced by end(), and length().

size_t casa::Slice::startp [private]

Definition at line 135 of file Slice.h.

Referenced by end(), and start().


The documentation for this class was generated from the following file: