|
| StManArrayFile (const String &name, ByteIO::OpenOption, uInt version=0, Bool bigEndian=True, uInt bufferSize=0, const std::shared_ptr< MultiFileBase > &=std::shared_ptr< MultiFileBase >()) |
| Construct the object and attach it to the give file.
|
|
| ~StManArrayFile () |
| Close the possibly opened file.
|
|
Bool | flush (Bool fsync) |
| Flush and optionally fsync the data.
|
|
void | reopenRW () |
| Reopen the file for read/write access.
|
|
void | resync () |
| Resync the file (i.e.
|
|
Int64 | length () |
| Return the current file length (merely a debug tool).
|
|
uInt | putShape (const IPosition &shape, Int64 &fileOffset, const Bool *dummy) |
| Put the array shape and store its file offset into the offset argument.
|
|
uInt | putShape (const IPosition &shape, Int64 &fileOffset, const Char *dummy) |
|
uInt | putShape (const IPosition &shape, Int64 &fileOffset, const uChar *dummy) |
|
uInt | putShape (const IPosition &shape, Int64 &fileOffset, const Short *dummy) |
|
uInt | putShape (const IPosition &shape, Int64 &fileOffset, const uShort *dummy) |
|
uInt | putShape (const IPosition &shape, Int64 &fileOffset, const Int *dummy) |
|
uInt | putShape (const IPosition &shape, Int64 &fileOffset, const uInt *dummy) |
|
uInt | putShape (const IPosition &shape, Int64 &fileOffset, const Int64 *dummy) |
|
uInt | putShape (const IPosition &shape, Int64 &fileOffset, const uInt64 *dummy) |
|
uInt | putShape (const IPosition &shape, Int64 &fileOffset, const Float *dummy) |
|
uInt | putShape (const IPosition &shape, Int64 &fileOffset, const Double *dummy) |
|
uInt | putShape (const IPosition &shape, Int64 &fileOffset, const Complex *dummy) |
|
uInt | putShape (const IPosition &shape, Int64 &fileOffset, const DComplex *dummy) |
|
uInt | putShape (const IPosition &shape, Int64 &fileOffset, const String *dummy) |
|
uInt | getRefCount (Int64 offset) |
| Get the reference count.
|
|
void | putRefCount (uInt refCount, Int64 offset) |
| Put the reference count.
|
|
void | put (Int64 fileOffset, Int64 arrayOffset, uInt64 nr, const Bool *) |
| Put nr elements at the given file offset and array offset.
|
|
void | put (Int64 fileOffset, Int64 arrayOffset, uInt64 nr, const Char *) |
|
void | put (Int64 fileOffset, Int64 arrayOffset, uInt64 nr, const uChar *) |
|
void | put (Int64 fileOffset, Int64 arrayOffset, uInt64 nr, const Short *) |
|
void | put (Int64 fileOffset, Int64 arrayOffset, uInt64 nr, const uShort *) |
|
void | put (Int64 fileOffset, Int64 arrayOffset, uInt64 nr, const Int *) |
|
void | put (Int64 fileOffset, Int64 arrayOffset, uInt64 nr, const uInt *) |
|
void | put (Int64 fileOffset, Int64 arrayOffset, uInt64 nr, const Int64 *) |
|
void | put (Int64 fileOffset, Int64 arrayOffset, uInt64 nr, const uInt64 *) |
|
void | put (Int64 fileOffset, Int64 arrayOffset, uInt64 nr, const Float *) |
|
void | put (Int64 fileOffset, Int64 arrayOffset, uInt64 nr, const Double *) |
|
void | put (Int64 fileOffset, Int64 arrayOffset, uInt64 nr, const Complex *) |
|
void | put (Int64 fileOffset, Int64 arrayOffset, uInt64 nr, const DComplex *) |
|
void | put (Int64 fileOffset, Int64 arrayOffset, uInt64 nr, const String *) |
|
uInt | getShape (Int64 fileOffset, IPosition &shape) |
| Get the shape at the given file offset.
|
|
void | get (Int64 fileOffset, Int64 arrayOffset, uInt64 nr, Bool *) |
| Get nr elements at the given file offset and array offset.
|
|
void | get (Int64 fileOffset, Int64 arrayOffset, uInt64 nr, Char *) |
|
void | get (Int64 fileOffset, Int64 arrayOffset, uInt64 nr, uChar *) |
|
void | get (Int64 fileOffset, Int64 arrayOffset, uInt64 nr, Short *) |
|
void | get (Int64 fileOffset, Int64 arrayOffset, uInt64 nr, uShort *) |
|
void | get (Int64 fileOffset, Int64 arrayOffset, uInt64 nr, Int *) |
|
void | get (Int64 fileOffset, Int64 arrayOffset, uInt64 nr, uInt *) |
|
void | get (Int64 fileOffset, Int64 arrayOffset, uInt64 nr, Int64 *) |
|
void | get (Int64 fileOffset, Int64 arrayOffset, uInt64 nr, uInt64 *) |
|
void | get (Int64 fileOffset, Int64 arrayOffset, uInt64 nr, Float *) |
|
void | get (Int64 fileOffset, Int64 arrayOffset, uInt64 nr, Double *) |
|
void | get (Int64 fileOffset, Int64 arrayOffset, uInt64 nr, Complex *) |
|
void | get (Int64 fileOffset, Int64 arrayOffset, uInt64 nr, DComplex *) |
|
void | get (Int64 fileOffset, Int64 arrayOffset, uInt64 nr, String *) |
|
void | copyArrayBool (Int64 to, Int64 from, uInt64 nr) |
| Copy the array with nr elements from one file offset to another.
|
|
void | copyArrayChar (Int64 to, Int64 from, uInt64 nr) |
|
void | copyArrayuChar (Int64 to, Int64 from, uInt64 nr) |
|
void | copyArrayShort (Int64 to, Int64 from, uInt64 nr) |
|
void | copyArrayuShort (Int64 to, Int64 from, uInt64 nr) |
|
void | copyArrayInt (Int64 to, Int64 from, uInt64 nr) |
|
void | copyArrayuInt (Int64 to, Int64 from, uInt64 nr) |
|
void | copyArrayInt64 (Int64 to, Int64 from, uInt64 nr) |
|
void | copyArrayuInt64 (Int64 to, Int64 from, uInt64 nr) |
|
void | copyArrayFloat (Int64 to, Int64 from, uInt64 nr) |
|
void | copyArrayDouble (Int64 to, Int64 from, uInt64 nr) |
|
void | copyArrayComplex (Int64 to, Int64 from, uInt64 nr) |
|
void | copyArrayDComplex (Int64 to, Int64 from, uInt64 nr) |
|
void | copyArrayString (Int64 to, Int64 from, uInt64 nr) |
|
Read/write array in external format for a storage manager
Intended use:
Internal
Review Status
- Reviewed By:
- UNKNOWN
- Date Reviewed:
- before2004/08/25
Prerequisite
Etymology
StManArrayFile is a class used by table storage managers to store indirect arrays in a file.
Synopsis
StManArrayFile is for use by the table storage manager, in particular to read/write indirectly stored arrays. Instead of holding the data in memory, they are written directly into a file. It also allows to access a part of an array, which is needed for the table system to access an array section. It does not use a cache of its own, but it is relying on the underlying system routines to cache and buffer adequately.
This class could in principle also be used for other array purposes, for example, to implement a paged array class for really huge arrays.
An StManArrayFile object is connected to one file. It is possible to hold multiple arrays in the file, each with its own shape. An array is stored as its shape followed by the actual data (all in little or big endian format). An array of strings is written as an array of offsets pointing to the actual strings. When a string gets a new value, the new value is written at the end of the file and the file space with the old value is lost.
Currently only the basic types are supported, but arbitrary types could also be supported by writing/reading an element in the normal way into the AipsIO buffer. It would only require that AipsIO would contain a function to get its buffers and to restart them.
Example
{
// Reserve space for an array with the given shape and data type.
// This writes the shape at the end of the file and reserves
// space the hold the entire Bool array.
// It fills in the file offset where the shape is stored
// and returns the length of the shape in the file.
Int64 offset;
uInt shapeLength = arrayFile.putShape (array.shape(), offset, static_cast<Bool*>(0));
// Now put the actual array.
// This has to be put at the returned file offset plus the length
// of the shape in the file.
Bool deleteIt;
const Bool* dataPtr = array.getStorage (deleteIt);
arrayFile.put (offset+shapeLength, 0, array.nelements(), dataPtr);
array.freeStorage (dataPtr, deleteIt);
}
TableExprNode array(const TableExprNode &values, const TableExprNodeSet &shape)
Create an array of the given shape and fill it with the values.
Motivation
The AipsIO class was not suitable for indirect table arrays, because it uses memory to hold the data. Furthermore it is not possible to access part of the data in AipsIO.
To Do
-
implement long double
-
support arbitrary types
-
when rewriting a string value, use the current file space if it fits
Definition at line 128 of file StArrayFile.h.