|
| StIndArray (Int64 fileOffset) |
| Construct the object with the given file offset. More...
|
|
| StIndArray (const StIndArray &) |
| Copy constructor. More...
|
|
StIndArray & | operator= (const StIndArray &) |
| Assignment. More...
|
|
| ~StIndArray () |
|
const IPosition & | shape () const |
| Get the shape. More...
|
|
Int64 | fileOffset () const |
| Get the file offset. More...
|
|
Bool | setShape (StManArrayFile &, int dataType, const IPosition &shape) |
| Set the shape and allocate the array in the file. More...
|
|
void | getShape (StManArrayFile &ios) |
| Read the shape if not read yet. More...
|
|
uInt | refCount (StManArrayFile &ios) |
| Get the reference count. More...
|
|
void | incrementRefCount (StManArrayFile &ios) |
| Increment the reference count. More...
|
|
void | decrementRefCount (StManArrayFile &ios) |
| Decrement the reference count. More...
|
|
void | copyData (StManArrayFile &ios, int dataType, const StIndArray &other) |
| Copy the data from another array. More...
|
|
void | getArrayBoolV (StManArrayFile &, Array< Bool > *dataPtr) |
| Get an array value from the file at the offset held in this object. More...
|
|
void | getArrayuCharV (StManArrayFile &, Array< uChar > *dataPtr) |
|
void | getArrayShortV (StManArrayFile &, Array< Short > *dataPtr) |
|
void | getArrayuShortV (StManArrayFile &, Array< uShort > *dataPtr) |
|
void | getArrayIntV (StManArrayFile &, Array< Int > *dataPtr) |
|
void | getArrayuIntV (StManArrayFile &, Array< uInt > *dataPtr) |
|
void | getArrayInt64V (StManArrayFile &, Array< Int64 > *dataPtr) |
|
void | getArrayfloatV (StManArrayFile &, Array< float > *dataPtr) |
|
void | getArraydoubleV (StManArrayFile &, Array< double > *dataPtr) |
|
void | getArrayComplexV (StManArrayFile &, Array< Complex > *dataPtr) |
|
void | getArrayDComplexV (StManArrayFile &, Array< DComplex > *dataPtr) |
|
void | getArrayStringV (StManArrayFile &, Array< String > *dataPtr) |
|
void | putArrayBoolV (StManArrayFile &, const Array< Bool > *dataPtr) |
| Put an array value into the file at the offset held in this object. More...
|
|
void | putArrayuCharV (StManArrayFile &, const Array< uChar > *dataPtr) |
|
void | putArrayShortV (StManArrayFile &, const Array< Short > *dataPtr) |
|
void | putArrayuShortV (StManArrayFile &, const Array< uShort > *dataPtr) |
|
void | putArrayIntV (StManArrayFile &, const Array< Int > *dataPtr) |
|
void | putArrayuIntV (StManArrayFile &, const Array< uInt > *dataPtr) |
|
void | putArrayInt64V (StManArrayFile &, const Array< Int64 > *dataPtr) |
|
void | putArrayfloatV (StManArrayFile &, const Array< float > *dataPtr) |
|
void | putArraydoubleV (StManArrayFile &, const Array< double > *dataPtr) |
|
void | putArrayComplexV (StManArrayFile &, const Array< Complex > *dataPtr) |
|
void | putArrayDComplexV (StManArrayFile &, const Array< DComplex > *dataPtr) |
|
void | putArrayStringV (StManArrayFile &, const Array< String > *dataPtr) |
|
void | getSliceBoolV (StManArrayFile &, const Slicer &, Array< Bool > *dataPtr) |
| Get a section of the array from the file at the offset held in this object. More...
|
|
void | getSliceuCharV (StManArrayFile &, const Slicer &, Array< uChar > *dataPtr) |
|
void | getSliceShortV (StManArrayFile &, const Slicer &, Array< Short > *dataPtr) |
|
void | getSliceuShortV (StManArrayFile &, const Slicer &, Array< uShort > *dataPtr) |
|
void | getSliceIntV (StManArrayFile &, const Slicer &, Array< Int > *dataPtr) |
|
void | getSliceuIntV (StManArrayFile &, const Slicer &, Array< uInt > *dataPtr) |
|
void | getSliceInt64V (StManArrayFile &, const Slicer &, Array< Int64 > *dataPtr) |
|
void | getSlicefloatV (StManArrayFile &, const Slicer &, Array< float > *dataPtr) |
|
void | getSlicedoubleV (StManArrayFile &, const Slicer &, Array< double > *dataPtr) |
|
void | getSliceComplexV (StManArrayFile &, const Slicer &, Array< Complex > *dataPtr) |
|
void | getSliceDComplexV (StManArrayFile &, const Slicer &, Array< DComplex > *dataPtr) |
|
void | getSliceStringV (StManArrayFile &, const Slicer &, Array< String > *dataPtr) |
|
void | putSliceBoolV (StManArrayFile &, const Slicer &, const Array< Bool > *dataPtr) |
| Put a section of the array into the file at the offset held in this object. More...
|
|
void | putSliceuCharV (StManArrayFile &, const Slicer &, const Array< uChar > *dataPtr) |
|
void | putSliceShortV (StManArrayFile &, const Slicer &, const Array< Short > *dataPtr) |
|
void | putSliceuShortV (StManArrayFile &, const Slicer &, const Array< uShort > *dataPtr) |
|
void | putSliceIntV (StManArrayFile &, const Slicer &, const Array< Int > *dataPtr) |
|
void | putSliceuIntV (StManArrayFile &, const Slicer &, const Array< uInt > *dataPtr) |
|
void | putSliceInt64V (StManArrayFile &, const Slicer &, const Array< Int64 > *dataPtr) |
|
void | putSlicefloatV (StManArrayFile &, const Slicer &, const Array< float > *dataPtr) |
|
void | putSlicedoubleV (StManArrayFile &, const Slicer &, const Array< double > *dataPtr) |
|
void | putSliceComplexV (StManArrayFile &, const Slicer &, const Array< Complex > *dataPtr) |
|
void | putSliceDComplexV (StManArrayFile &, const Slicer &, const Array< DComplex > *dataPtr) |
|
void | putSliceStringV (StManArrayFile &, const Slicer &, const Array< String > *dataPtr) |
|
|
static void | getVecBoolV (StManArrayFile &, Int64 fileOffset, uInt arrayStart, uInt length, uInt increment, uInt valueIndex, void *value) |
| Get a (type-dependent) vector part of a slice. More...
|
|
static void | getVecuCharV (StManArrayFile &, Int64 fileOffset, uInt arrayStart, uInt length, uInt increment, uInt valueIndex, void *value) |
|
static void | getVecShortV (StManArrayFile &, Int64 fileOffset, uInt arrayStart, uInt length, uInt increment, uInt valueIndex, void *value) |
|
static void | getVecuShortV (StManArrayFile &, Int64 fileOffset, uInt arrayStart, uInt length, uInt increment, uInt valueIndex, void *value) |
|
static void | getVecIntV (StManArrayFile &, Int64 fileOffset, uInt arrayStart, uInt length, uInt increment, uInt valueIndex, void *value) |
|
static void | getVecuIntV (StManArrayFile &, Int64 fileOffset, uInt arrayStart, uInt length, uInt increment, uInt valueIndex, void *value) |
|
static void | getVecInt64V (StManArrayFile &, Int64 fileOffset, uInt arrayStart, uInt length, uInt increment, uInt valueIndex, void *value) |
|
static void | getVecfloatV (StManArrayFile &, Int64 fileOffset, uInt arrayStart, uInt length, uInt increment, uInt valueIndex, void *value) |
|
static void | getVecdoubleV (StManArrayFile &, Int64 fileOffset, uInt arrayStart, uInt length, uInt increment, uInt valueIndex, void *value) |
|
static void | getVecComplexV (StManArrayFile &, Int64 fileOffset, uInt arrayStart, uInt length, uInt increment, uInt valueIndex, void *value) |
|
static void | getVecDComplexV (StManArrayFile &, Int64 fileOffset, uInt arrayStart, uInt length, uInt increment, uInt valueIndex, void *value) |
|
static void | getVecStringV (StManArrayFile &, Int64 fileOffset, uInt arrayStart, uInt length, uInt increment, uInt valueIndex, void *value) |
|
static void | putVecBoolV (StManArrayFile &, Int64 fileOffset, uInt arrayStart, uInt length, uInt increment, uInt valueIndex, const void *value) |
| Put a (type-dependent) vector part of a slice. More...
|
|
static void | putVecuCharV (StManArrayFile &, Int64 fileOffset, uInt arrayStart, uInt length, uInt increment, uInt valueIndex, const void *value) |
|
static void | putVecShortV (StManArrayFile &, Int64 fileOffset, uInt arrayStart, uInt length, uInt increment, uInt valueIndex, const void *value) |
|
static void | putVecuShortV (StManArrayFile &, Int64 fileOffset, uInt arrayStart, uInt length, uInt increment, uInt valueIndex, const void *value) |
|
static void | putVecIntV (StManArrayFile &, Int64 fileOffset, uInt arrayStart, uInt length, uInt increment, uInt valueIndex, const void *value) |
|
static void | putVecuIntV (StManArrayFile &, Int64 fileOffset, uInt arrayStart, uInt length, uInt increment, uInt valueIndex, const void *value) |
|
static void | putVecInt64V (StManArrayFile &, Int64 fileOffset, uInt arrayStart, uInt length, uInt increment, uInt valueIndex, const void *value) |
|
static void | putVecfloatV (StManArrayFile &, Int64 fileOffset, uInt arrayStart, uInt length, uInt increment, uInt valueIndex, const void *value) |
|
static void | putVecdoubleV (StManArrayFile &, Int64 fileOffset, uInt arrayStart, uInt length, uInt increment, uInt valueIndex, const void *value) |
|
static void | putVecComplexV (StManArrayFile &, Int64 fileOffset, uInt arrayStart, uInt length, uInt increment, uInt valueIndex, const void *value) |
|
static void | putVecDComplexV (StManArrayFile &, Int64 fileOffset, uInt arrayStart, uInt length, uInt increment, uInt valueIndex, const void *value) |
|
static void | putVecStringV (StManArrayFile &, Int64 fileOffset, uInt arrayStart, uInt length, uInt increment, uInt valueIndex, const void *value) |
|
Read/write indirect arrays.
Intended use:
Internal
Review Status
- Reviewed By:
- UNKNOWN
- Date Reviewed:
- before2004/08/25
Prerequisite
Etymology
StIndArray stores indirect arrays on behalf of a storage manager.
Synopsis
StIndArray is a helper class for accessing indirect table arrays. It is the interface between a storage manager like StManAipsIO (in particular its indirect array column class
StManColumnIndArrayAipsIO) and the data storage class StManArrayFile which represents the file holding the shapes and data of the arrays. This file holds the data in canonical format.
StIndArray holds information about an array in the file.
-
Offset of the array in the file. This points to the array shape. This is stored by storage managers and serves as the mapping between row number and array.
-
Array data offset, i.e. the length of the shape in the file. Because the data is stored in canonical format, the length of the shape in the file is not directly known but has to be supplied this way.
-
The actual shape of the array
The storage manager creates an StIndArray object for each row. When an array is accessed for the first time, the array data offset and the shape will be filled in by StIndArray. In this way it serves as a cache for the array shape.
StIndArray implements all necessary functions to get/put an array or an array slice from/into file supplied by the given StManArrayFile object. The StManArrayFile object itself has to be created by the storage manager and given to the StIndArray functions.
Motivation
This helper class makes it possible to share equal functionality between various storage managers handling indirect arrays. At the moment it is used by StmanColumnIndArrayAipsIO and StManColumnIndArrayMirAIO (the AipsIO and Miriad-like storage manager, resp.), but it is not limited to them. It can equally well be used for any other storage manager storing (indirect) arrays via an StManArrayFile object.
Example
Note that the following example is not really useful. StIndArray is an internal class and should not be used by a casual user. The example may however give a bit of insight.
arrayRef.setShape (stmanFile, TpFloat, array.shape());
arrayRef.putArrayfloatV (stmanFile, &array);
Int64 offset = arrayRef.fileOffset();
arrayRef2.getShape (stmanFile);
Array<float> array2(arrayRef2.shape());
arrayRef2.getArrayfloatV (stmanFile, &array2);
To Do
-
Reuse file storage when an array gets reshaped. This could be done when the array does not grow. It also requires a change in StManArrayFile.
-
Be smarter when accessing slices by not accessing a vector at a time, but by determining and accessing the largest possible consecutive area.
Definition at line 141 of file StIndArray.h.