casacore
Public Member Functions | Private Member Functions | Private Attributes | List of all members

More...

#include <TSMCubeBuff.h>

Public Member Functions

 TSMCubeBuff (TiledStMan *stman, TSMFile *file, const IPosition &cubeShape, const IPosition &tileShape, const Record &values, Int64 fileOffset, uInt bufferSize)
 Construct the hypercube using the given file with the given shape. More...
 
 TSMCubeBuff (TiledStMan *stman, AipsIO &ios, uInt bufferSize)
 Reconstruct the hypercube by reading its data from the AipsIO stream. More...
 
virtual ~TSMCubeBuff ()
 
virtual void flushCache ()
 Flush the data in the cache. More...
 
virtual void showCacheStatistics (ostream &os) const
 Show the cache statistics. More...
 
virtual void setShape (const IPosition &cubeShape, const IPosition &tileShape)
 Set the hypercube shape. More...
 
virtual void extend (uInt64 nr, const Record &coordValues, const TSMColumn *lastCoordColumn)
 Extend the last dimension of the cube with the given number. More...
 
virtual void accessSection (const IPosition &start, const IPosition &end, char *section, uInt colnr, uInt localPixelSize, uInt externalPixelSize, Bool writeFlag)
 Read or write a section in the cube. More...
 
virtual void accessStrided (const IPosition &start, const IPosition &end, const IPosition &stride, char *section, uInt colnr, uInt localPixelSize, uInt externalPixelSize, Bool writeFlag)
 Read or write a section in a strided way. More...
 
virtual void setCacheSize (const IPosition &sliceShape, const IPosition &windowStart, const IPosition &windowLength, const IPosition &axisPath, Bool forceSmaller, Bool userSet)
 Set the cache size for the given slice and access path. More...
 
virtual void setCacheSize (uInt cacheSize, Bool forceSmaller, Bool userSet)
 Resize the cache object. More...
 
- Public Member Functions inherited from casacore::TSMCube
 TSMCube (TiledStMan *stman, TSMFile *file, const IPosition &cubeShape, const IPosition &tileShape, const Record &values, Int64 fileOffset, Bool useDerived=False)
 Construct the hypercube using the given file with the given shape. More...
 
 TSMCube (TiledStMan *stman, AipsIO &ios, Bool useDerived=False)
 Reconstruct the hypercube by reading its data from the AipsIO stream. More...
 
virtual ~TSMCube ()
 
void clearCache (Bool doFlush=True)
 Clear the cache, so data will be reread. More...
 
void emptyCache ()
 Empty the cache. More...
 
void putObject (AipsIO &ios)
 Put the data of the object into the AipsIO stream. More...
 
Int getObject (AipsIO &ios)
 Get the data of the object from the AipsIO stream. More...
 
virtual void resync (AipsIO &ios)
 Resync the object with the data file. More...
 
Bool isExtensible () const
 Is the hypercube extensible? More...
 
uInt bucketSize () const
 Get the bucket size (bytes). More...
 
uInt localTileLength () const
 Get the length of a tile (in bytes) in local format. More...
 
const IPositioncubeShape () const
 Get the shape of the hypercube. More...
 
const IPositiontileShape () const
 Get the shape of the tiles. More...
 
IPosition cellShape () const
 Get the shape of the data cells in the cube. More...
 
uInt coordinateSize (const String &coordinateName) const
 Get the size of a coordinate (i.e. More...
 
const RecordvalueRecord () const
 Get the record containing the id and coordinate values. More...
 
RecordrwValueRecord ()
 
Bool matches (const PtrBlock< TSMColumn * > &idColSet, const Record &idValues)
 Test if the id values match. More...
 
void extendCoordinates (const Record &coordValues, const String &coordName, uInt length)
 Extend the coordinates vector for the given coordinate to the given length with the given coordValues. More...
 
uInt cacheSize () const
 Get the current cache size (in buckets). More...
 
uInt calcCacheSize (const IPosition &sliceShape, const IPosition &windowStart, const IPosition &windowLength, const IPosition &axisPath) const
 Calculate the cache size (in buckets) for the given slice and access path. More...
 
uInt validateCacheSize (uInt cacheSize) const
 Validate the cache size (in buckets). More...
 
Bool userSetCache () const
 Determine if the user set the cache size (using setCacheSize). More...
 
AccessType getLastColAccess () const
 Functions for TSMDataColumn to keep track of the last type of access to a hypercube. More...
 
const IPositiongetLastColSlice () const
 
void setLastColAccess (AccessType type)
 
void setLastColSlice (const IPosition &slice)
 

Private Member Functions

 TSMCubeBuff (const TSMCubeBuff &)
 Forbid copy constructor. More...
 
TSMCubeBuffoperator= (const TSMCubeBuff &)
 Forbid assignment. More...
 
BucketBufferedgetCache ()
 Get the cache object. More...
 
virtual void makeCache ()
 Construct the cache object (if not constructed yet). More...
 
virtual void resyncCache ()
 Resync the cache object. More...
 
virtual void deleteCache ()
 Delete the cache object. More...
 

Private Attributes

BucketBufferedcache_p
 The bucket cache. More...
 
uInt bufferSize_p
 The buffer size to use. More...
 

Additional Inherited Members

- Public Types inherited from casacore::TSMCube
enum  AccessType {
  NoAccess ,
  CellAccess ,
  SliceAccess ,
  ColumnAccess ,
  ColumnSliceAccess
}
 Define the possible access types for TSMDataColumn. More...
 
- Static Public Member Functions inherited from casacore::TSMCube
static uInt calcCacheSize (const IPosition &cubeShape, const IPosition &tileShape, Bool extensible, const IPosition &sliceShape, const IPosition &windowStart, const IPosition &windowLength, const IPosition &axisPath, uInt maxCacheSizeMiB, uInt bucketSize)
 
static uInt validateCacheSize (uInt cacheSize, uInt maxSizeMiB, uInt bucketSize)
 
- Protected Member Functions inherited from casacore::TSMCube
void setup ()
 Initialize the various variables. More...
 
void setupNrTiles ()
 
IPosition adjustTileShape (const IPosition &cubeShape, const IPosition &tileShape) const
 Adjust the tile shape to the hypercube shape. More...
 
void resizeTileSections ()
 Resize the IPosition member variables used in accessSection() if nrdim_p changes value. More...
 
- Protected Attributes inherited from casacore::TSMCube
char * cachedTile_p
 
TiledStManstmanPtr_p
 Pointer to the parent storage manager. More...
 
Bool useDerived_p
 Is the class used directly or only by a derived class only? More...
 
Record values_p
 The values of the possible id and coordinate columns. More...
 
Bool extensible_p
 Is the hypercube extensible? More...
 
uInt nrdim_p
 Dimensionality of the hypercube. More...
 
uInt nrTiles_p
 Number of tiles in the hypercube. More...
 
IPosition cubeShape_p
 The shape of the hypercube. More...
 
IPosition tileShape_p
 The shape of the tiles in the hypercube. More...
 
IPosition tilesPerDim_p
 The number of tiles in each hypercube dimension. More...
 
TSMShape expandedTileShape_p
 Precomputed tileShape information. More...
 
TSMShape expandedTilesPerDim_p
 Precomputed tilesPerDim information. More...
 
uInt nrTilesSubCube_p
 Number of tiles in all but last dimension (used when extending). More...
 
uInt tileSize_p
 The tilesize in bytes. More...
 
TSMFilefilePtr_p
 Pointer to the TSMFile object holding the data. More...
 
Int64 fileOffset_p
 Offset in the TSMFile object where the data of this hypercube starts. More...
 
Block< uIntexternalOffset_p
 Offset for each data column in a tile (in external format). More...
 
Block< uIntlocalOffset_p
 Offset for each data column in a tile (in local format). More...
 
uInt bucketSize_p
 The bucket size in bytes (is equal to tile size in bytes). More...
 
uInt localTileLength_p
 The tile size in bytes in local format. More...
 
BucketCachecache_p
 The bucket cache. More...
 
Bool userSetCache_p
 Did the user set the cache size? More...
 
AccessType lastColAccess_p
 Was the last column access to a cell, slice, or column? More...
 
IPosition lastColSlice_p
 The slice shape of the last column access to a slice. More...
 
IPosition nrTileSection_p
 IPosition variables used in accessSection(); declared here as member variables to avoid significant construction and desctruction overhead if they are local to accessSection() #tiles needed for the section. More...
 
IPosition startTile_p
 First tile needed. More...
 
IPosition endTile_p
 Last tile needed. More...
 
IPosition startPixelInFirstTile_p
 First pixel in first tile. More...
 
IPosition endPixelInFirstTile_p
 Last pixel in first tile. More...
 
IPosition endPixelInLastTile_p
 Last pixel in last tile. More...
 

Detailed Description

Tiled hypercube in a table

Intended use:

Internal

Review Status

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

Prerequisite

Etymology

TSMCubeBuff represents a hypercube in the Tiled Storage Manager.

Synopsis

TSMCubeBuff defines a tiled hypercube. The data is stored in a TSMFile object and accessed using a BucketBuffered object. The hypercube can be extensible in its last dimension to support tables with a size which is not known in advance.
Normally hypercubes share the same TSMFile object, but extensible hypercubes have their own TSMFile object (to be extensible). If the hypercolumn has multiple data columns, their cells share the same tiles. Per tile data column A appears first, thereafter B, etc..
The data in the cache is held in external format and is converted when accessed. The alternative would be to hold it in the cache in local format and convert it when read/written from the file. It was felt that the latter approach would generate more needless conversions.

The possible id and coordinate values are stored in a Record object. They are written in the main hypercube AipsIO file.

TSMCubeBuff uses the maximum cache size set for a Tiled Storage manager. The description of class ROTiledStManAccessor contains a discussion about the effect of setting the maximum cache size.

Motivation

TSMCubeBuff encapsulates all operations on a hypercube.

Definition at line 97 of file TSMCubeBuff.h.

Constructor & Destructor Documentation

◆ TSMCubeBuff() [1/3]

casacore::TSMCubeBuff::TSMCubeBuff ( TiledStMan stman,
TSMFile file,
const IPosition cubeShape,
const IPosition tileShape,
const Record values,
Int64  fileOffset,
uInt  bufferSize 
)

Construct the hypercube using the given file with the given shape.

The record contains the id and possible coordinate values.
If the cubeshape is empty, the hypercube is still undefined and can be added later with setShape. That is only used by TiledCellStMan.
The fileOffset argument is meant for class TiledFileAccess.

◆ TSMCubeBuff() [2/3]

casacore::TSMCubeBuff::TSMCubeBuff ( TiledStMan stman,
AipsIO ios,
uInt  bufferSize 
)

Reconstruct the hypercube by reading its data from the AipsIO stream.

It will link itself to the correct TSMFile. The TSMFile objects must have been reconstructed in advance.

◆ ~TSMCubeBuff()

virtual casacore::TSMCubeBuff::~TSMCubeBuff ( )
virtual

◆ TSMCubeBuff() [3/3]

casacore::TSMCubeBuff::TSMCubeBuff ( const TSMCubeBuff )
private

Forbid copy constructor.

Member Function Documentation

◆ accessSection()

virtual void casacore::TSMCubeBuff::accessSection ( const IPosition start,
const IPosition end,
char *  section,
uInt  colnr,
uInt  localPixelSize,
uInt  externalPixelSize,
Bool  writeFlag 
)
virtual

Read or write a section in the cube.

It is assumed that the section buffer is long enough.

Reimplemented from casacore::TSMCube.

◆ accessStrided()

virtual void casacore::TSMCubeBuff::accessStrided ( const IPosition start,
const IPosition end,
const IPosition stride,
char *  section,
uInt  colnr,
uInt  localPixelSize,
uInt  externalPixelSize,
Bool  writeFlag 
)
virtual

Read or write a section in a strided way.

It is assumed that the section buffer is long enough.

Reimplemented from casacore::TSMCube.

◆ deleteCache()

virtual void casacore::TSMCubeBuff::deleteCache ( )
privatevirtual

Delete the cache object.

Reimplemented from casacore::TSMCube.

◆ extend()

virtual void casacore::TSMCubeBuff::extend ( uInt64  nr,
const Record coordValues,
const TSMColumn lastCoordColumn 
)
virtual

Extend the last dimension of the cube with the given number.

The record can contain the coordinates of the elements added.

Reimplemented from casacore::TSMCube.

◆ flushCache()

virtual void casacore::TSMCubeBuff::flushCache ( )
virtual

Flush the data in the cache.

Reimplemented from casacore::TSMCube.

◆ getCache()

BucketBuffered * casacore::TSMCubeBuff::getCache ( )
inlineprivate

Get the cache object.

This will construct the cache object if not present yet.

Definition at line 193 of file TSMCubeBuff.h.

References cache_p, and makeCache().

◆ makeCache()

virtual void casacore::TSMCubeBuff::makeCache ( )
privatevirtual

Construct the cache object (if not constructed yet).

Reimplemented from casacore::TSMCube.

Referenced by getCache().

◆ operator=()

TSMCubeBuff& casacore::TSMCubeBuff::operator= ( const TSMCubeBuff )
private

Forbid assignment.

◆ resyncCache()

virtual void casacore::TSMCubeBuff::resyncCache ( )
privatevirtual

Resync the cache object.

Reimplemented from casacore::TSMCube.

◆ setCacheSize() [1/2]

virtual void casacore::TSMCubeBuff::setCacheSize ( const IPosition sliceShape,
const IPosition windowStart,
const IPosition windowLength,
const IPosition axisPath,
Bool  forceSmaller,
Bool  userSet 
)
virtual

Set the cache size for the given slice and access path.

Reimplemented from casacore::TSMCube.

◆ setCacheSize() [2/2]

virtual void casacore::TSMCubeBuff::setCacheSize ( uInt  cacheSize,
Bool  forceSmaller,
Bool  userSet 
)
virtual

Resize the cache object.

If forceSmaller is False, the cache will only be resized when it grows. If the given size exceeds the maximum size with more than 10%, the maximum size will be used. The cacheSize has to be given in buckets.
The flag userSet inidicates if the cache size is set by the user (by an Accessor object) or automatically (by TSMDataColumn).

Reimplemented from casacore::TSMCube.

◆ setShape()

virtual void casacore::TSMCubeBuff::setShape ( const IPosition cubeShape,
const IPosition tileShape 
)
virtual

Set the hypercube shape.

This is only possible if the shape was not defined yet.

Reimplemented from casacore::TSMCube.

◆ showCacheStatistics()

virtual void casacore::TSMCubeBuff::showCacheStatistics ( ostream &  os) const
virtual

Show the cache statistics.

Reimplemented from casacore::TSMCube.

Member Data Documentation

◆ bufferSize_p

uInt casacore::TSMCubeBuff::bufferSize_p
private

The buffer size to use.

Definition at line 188 of file TSMCubeBuff.h.

◆ cache_p

BucketBuffered* casacore::TSMCubeBuff::cache_p
private

The bucket cache.

Definition at line 186 of file TSMCubeBuff.h.

Referenced by getCache().


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