|
| 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 | getArrayV (StManArrayFile &ios, ArrayBase &arr, DataType dtype) |
| Get an array value from the file at the offset held in this object. More...
|
|
void | putArrayV (StManArrayFile &ios, const ArrayBase &arr, DataType dtype) |
| Put an array value into the file at the offset held in this object. More...
|
|
void | getSliceV (StManArrayFile &, const Slicer &, ArrayBase &dataPtr, DataType dtype) |
| Get a section of the array from the file at the offset held in this object. More...
|
|
void | putSliceV (StManArrayFile &, const Slicer &, const ArrayBase &dataPtr, DataType dtype) |
| Put a section of the array into the file at the offset held in this object. More...
|
|
|
void | getSliceData (StManArrayFile &, const Slicer &ns, void *value, const IPosition &userArrayShape, void(*getVec)(StManArrayFile &, Int64, uInt64, uInt64, uInt64, uInt64, void *dataPtr)) |
| Get sliced data, i.e. More...
|
|
void | putSliceData (StManArrayFile &, const Slicer &ns, const void *value, const IPosition &userArrayShape, void(*putVec)(StManArrayFile &, Int64, uInt64, uInt64, uInt64, uInt64, const void *dataPtr)) |
| Put sliced data, i.e. More...
|
|
void | checkShape (const IPosition &userArrayShape, const IPosition &tableArrayShape) const |
| Throw an exception if the shape of the given array and the table array (slice) are not equal. More...
|
|
|
static void | getVecBoolV (StManArrayFile &, Int64 fileOffset, uInt64 arrayStart, uInt64 length, uInt64 increment, uInt64 valueIndex, void *value) |
| Get a (type-dependent) vector part of a slice. More...
|
|
static void | getVecuCharV (StManArrayFile &, Int64 fileOffset, uInt64 arrayStart, uInt64 length, uInt64 increment, uInt64 valueIndex, void *value) |
|
static void | getVecShortV (StManArrayFile &, Int64 fileOffset, uInt64 arrayStart, uInt64 length, uInt64 increment, uInt64 valueIndex, void *value) |
|
static void | getVecuShortV (StManArrayFile &, Int64 fileOffset, uInt64 arrayStart, uInt64 length, uInt64 increment, uInt64 valueIndex, void *value) |
|
static void | getVecIntV (StManArrayFile &, Int64 fileOffset, uInt64 arrayStart, uInt64 length, uInt64 increment, uInt64 valueIndex, void *value) |
|
static void | getVecuIntV (StManArrayFile &, Int64 fileOffset, uInt64 arrayStart, uInt64 length, uInt64 increment, uInt64 valueIndex, void *value) |
|
static void | getVecInt64V (StManArrayFile &, Int64 fileOffset, uInt64 arrayStart, uInt64 length, uInt64 increment, uInt64 valueIndex, void *value) |
|
static void | getVecfloatV (StManArrayFile &, Int64 fileOffset, uInt64 arrayStart, uInt64 length, uInt64 increment, uInt64 valueIndex, void *value) |
|
static void | getVecdoubleV (StManArrayFile &, Int64 fileOffset, uInt64 arrayStart, uInt64 length, uInt64 increment, uInt64 valueIndex, void *value) |
|
static void | getVecComplexV (StManArrayFile &, Int64 fileOffset, uInt64 arrayStart, uInt64 length, uInt64 increment, uInt64 valueIndex, void *value) |
|
static void | getVecDComplexV (StManArrayFile &, Int64 fileOffset, uInt64 arrayStart, uInt64 length, uInt64 increment, uInt64 valueIndex, void *value) |
|
static void | getVecStringV (StManArrayFile &, Int64 fileOffset, uInt64 arrayStart, uInt64 length, uInt64 increment, uInt64 valueIndex, void *value) |
|
static void | putVecBoolV (StManArrayFile &, Int64 fileOffset, uInt64 arrayStart, uInt64 length, uInt64 increment, uInt64 valueIndex, const void *value) |
| Put a (type-dependent) vector part of a slice. More...
|
|
static void | putVecuCharV (StManArrayFile &, Int64 fileOffset, uInt64 arrayStart, uInt64 length, uInt64 increment, uInt64 valueIndex, const void *value) |
|
static void | putVecShortV (StManArrayFile &, Int64 fileOffset, uInt64 arrayStart, uInt64 length, uInt64 increment, uInt64 valueIndex, const void *value) |
|
static void | putVecuShortV (StManArrayFile &, Int64 fileOffset, uInt64 arrayStart, uInt64 length, uInt64 increment, uInt64 valueIndex, const void *value) |
|
static void | putVecIntV (StManArrayFile &, Int64 fileOffset, uInt64 arrayStart, uInt64 length, uInt64 increment, uInt64 valueIndex, const void *value) |
|
static void | putVecuIntV (StManArrayFile &, Int64 fileOffset, uInt64 arrayStart, uInt64 length, uInt64 increment, uInt64 valueIndex, const void *value) |
|
static void | putVecInt64V (StManArrayFile &, Int64 fileOffset, uInt64 arrayStart, uInt64 length, uInt64 increment, uInt64 valueIndex, const void *value) |
|
static void | putVecfloatV (StManArrayFile &, Int64 fileOffset, uInt64 arrayStart, uInt64 length, uInt64 increment, uInt64 valueIndex, const void *value) |
|
static void | putVecdoubleV (StManArrayFile &, Int64 fileOffset, uInt64 arrayStart, uInt64 length, uInt64 increment, uInt64 valueIndex, const void *value) |
|
static void | putVecComplexV (StManArrayFile &, Int64 fileOffset, uInt64 arrayStart, uInt64 length, uInt64 increment, uInt64 valueIndex, const void *value) |
|
static void | putVecDComplexV (StManArrayFile &, Int64 fileOffset, uInt64 arrayStart, uInt64 length, uInt64 increment, uInt64 valueIndex, const void *value) |
|
static void | putVecStringV (StManArrayFile &, Int64 fileOffset, uInt64 arrayStart, uInt64 length, uInt64 increment, uInt64 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 the StManAipsIO, IncrementalStMan, and StandardStMan storage managers, but it is not limited to them. It can equally well be used by 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);
@ New
read/write; create file if not exist.
StIndArray(Int64 fileOffset)
Construct the object with the given file offset.
TableExprNode array(const TableExprNode &values, const TableExprNodeSet &shape)
Create an array of the given shape and fill it with the values.
long long Int64
Define the extra non-standard types used by Casacore (like proposed uSize, Size)
To Do
-
Reuse file storage when an array gets reshaped. This could be done if 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.