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

Expanded IPosition for shapes. More...

#include <TSMShape.h>

List of all members.

Public Member Functions

 TSMShape ()
 A zero-length TSMShape.
 TSMShape (const IPosition &shape)
 Construct from a shape and precalculate some values.
 TSMShape (const TSMShape &that)
 Copy constructor (copy semantics).
TSMShapeoperator= (const TSMShape &that)
 Assignment (copy semantics).
 ~TSMShape ()
Int operator() (uInt index) const
 Index into the TSMShape.
uInt nelements () const
 The number of elements in this TSMShape.
Bool conform (const TSMShape &other) const
 conform returns true if nelements() == other.nelements().
size_t offset (const IPosition &position) const
 Calculate the offset for a given position.
size_t offset (const IPosition &position, const IPosition &origin) const
IPosition position (size_t offset) const
 Calculate the position for a given offset.
IPosition position (size_t offset, const IPosition &origin) const
IPosition offsetIncrement (const IPosition &subShape) const
 Calculate the increments when stepping through an array in a linear way.
IPosition offsetIncrement (const IPosition &subShape, const IPosition &stride) const

Private Attributes

IPosition data_p
 
     

uInt size_p

Detailed Description

Expanded IPosition for shapes.

Intended use:

Internal

Review Status

Reviewed By:
UNKNOWN
Date Reviewed:
before2004/08/25

Prerequisite

Etymology

TSMShape handles the shapes for the Tiled Storage Manager.

Synopsis

TSMShape is an extension of class IPosition to handle shapes. It contains some precalculated values to speed up the calculation of an array offset from an array index (and vice-versa).

Motivation

The Tiled Hypercube Storage Manager is heavily using array shapes and determining offsets from array indices. This class makes these calculations more efficient.

To Do

Definition at line 77 of file TSMShape.h.


Constructor & Destructor Documentation

A zero-length TSMShape.

casa::TSMShape::TSMShape ( const IPosition shape)

Construct from a shape and precalculate some values.

Copy constructor (copy semantics).


Member Function Documentation

Bool casa::TSMShape::conform ( const TSMShape other) const [inline]

conform returns true if nelements() == other.nelements().

Definition at line 174 of file TSMShape.h.

References casa::IPosition::conform(), and data_p.

uInt casa::TSMShape::nelements ( ) const [inline]

The number of elements in this TSMShape.

Since TSMShape objects use zero-based indexing, the maximum available index is nelements() - 1.

Definition at line 164 of file TSMShape.h.

References size_p.

size_t casa::TSMShape::offset ( const IPosition position) const

Calculate the offset for a given position.

size_t casa::TSMShape::offset ( const IPosition position,
const IPosition origin 
) const

Calculate the increments when stepping through an array in a linear way.

This can be used to update the array offset without recalculating it after each step. For example:

        template<class T>
        Array<T> someFunc (const Array<T>& array,
                           const IPosition& subArrayShape,
                           const IPosition& subArrayStart) const
        {
            TSMShape TSM (array.shape());
            IPosition offsetIncr = TSM.offsetIncrement (subArrayShape);
            Array<T> subArray(subArrayShape);
            Bool deleteMain;
            const T* mainData = array.getStorage (deleteMain);
            mainData += TSM.offset (subArrayStart)
            Bool deleteSub;
            T* subData = subArray.getStorage (deleteSub);
            for (uInt i=0; i<subArrayShape(2); i++) {
                for (uInt j=0; j<subArrayShape(1); j++) {
                    for (uInt k=0; k<subArrayShape(0); k++) {
                        *subData++ = *mainData++;
                    }
                    mainData += offsetIncr(1);
                }
                mainData += offSetIncr(2);
            }
        }
IPosition casa::TSMShape::offsetIncrement ( const IPosition subShape,
const IPosition stride 
) const
Int casa::TSMShape::operator() ( uInt  index) const [inline]

Index into the TSMShape.

Indices are zero-based. If the preprocessor symbol AIPS_ARRAY_INDEX_CHECK is defined, "index" will be checked to ensure it is not out of bounds. If this check fails, an AipsError will be thrown.

Definition at line 169 of file TSMShape.h.

References data_p.

TSMShape& casa::TSMShape::operator= ( const TSMShape that)

Assignment (copy semantics).

"this" and "that" must either be conformant (same size) or "this" must be 0-length, in which case it will resize itself to be the same length as "that".

IPosition casa::TSMShape::position ( size_t  offset) const

Calculate the position for a given offset.

IPosition casa::TSMShape::position ( size_t  offset,
const IPosition origin 
) const

Member Data Documentation

     

Definition at line 159 of file TSMShape.h.

Referenced by conform(), and operator()().

Definition at line 160 of file TSMShape.h.

Referenced by nelements().


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