casacore
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Public Member Functions | Private Member Functions | Private Attributes | List of all members
casacore::SSMIndex Class Reference

The bucket index for a group of columns in the Standard Storage Manager. More...

#include <SSMIndex.h>

Public Member Functions

 SSMIndex (SSMBase *aPtrSSM, uInt rowsPerBucket=0)
 Create the object with the given number of rows per bucket. More...
 
 ~SSMIndex ()
 
void get (AipsIO &anOs)
 Read the bucket index from the AipsIO object. More...
 
void put (AipsIO &anOs) const
 Write the bucket index into the AipsIO object. More...
 
void recreate ()
 Recreate the object in case all rows are deleted from the table. More...
 
Vector< uIntgetBuckets () const
 Return all the bucketnrs used in this index. More...
 
uInt getNrBuckets () const
 Return the nr of buckets used. More...
 
void setNrColumns (Int aNrColumns, uInt aSizeUsed)
 Set nr of columns use this index. More...
 
void addRow (rownr_t aNrRows)
 Add some rows. More...
 
void showStatistics (ostream &anOs) const
 Show Statistics of index. More...
 
Int removeColumn (Int anOffset, uInt nbits)
 A column is removed. More...
 
Int getFree (Int &anOffset, uInt nbits) const
 Try to find free space for a field with a given length (best fit). More...
 
void addColumn (Int anOffset, uInt nbits)
 reuse the space at offset for a field with the given nr of bits. More...
 
Int deleteRow (rownr_t aRowNumber)
 Delete the given row. More...
 
uInt getRowsPerBucket () const
 Get the number of rows that fits in ach bucket. More...
 
void find (rownr_t aRowNumber, uInt &aBucketNr, rownr_t &aStartRow, rownr_t &anEndRow, const String &colName) const
 Find the bucket containing the given row. More...
 

Private Member Functions

uInt getIndex (rownr_t aRowNr, const String &colName) const
 Get the index of the bucket containing the given row. More...
 

Private Attributes

SSMBaseitsSSMPtr
 
uInt itsNUsed
 
Block< rownr_titsLastRow
 
Block< uIntitsBucketNumber
 
std::map< Int, IntitsFreeSpace
 
uInt itsRowsPerBucket
 
Int itsNrColumns
 

Detailed Description

The bucket index for a group of columns in the Standard Storage Manager.

Intended use:

Internal

Review Status

Reviewed By:
UNKNOWN
Date Reviewed:
before2004/08/25
Test programs:
tStandardStMan

Prerequisite

Etymology

SSMIndex represent the bucket index in the Standard Storage Manager.

Synopsis

In SSMBase it is described that an index is used to map row number to data bucket in a bucket stream. This class implements this index. It serves 2 purposes:

  1. It keeps a block of row numbers giving the last row number stored in each data bucket.
    Note that each bucket does not need to contain the same number of rows, because rows might be deleted from it. When all rows are deleted from a bucket, the bucket is removed from the index and added to the free bucket list.
  2. When a column is deleted, the bucket will have a hole. SSMIndex maintains a map to know the size and offset of each hole. Adjacent holes are combined. When a new column is added SSMBase will scan the SSMIndex objects to find the hole fitting best.

To Do

Definition at line 86 of file SSMIndex.h.

Constructor & Destructor Documentation

casacore::SSMIndex::SSMIndex ( SSMBase aPtrSSM,
uInt  rowsPerBucket = 0 
)
explicit

Create the object with the given number of rows per bucket.

Note that the default is needed to create the object for existing tables.

casacore::SSMIndex::~SSMIndex ( )

Member Function Documentation

void casacore::SSMIndex::addColumn ( Int  anOffset,
uInt  nbits 
)

reuse the space at offset for a field with the given nr of bits.

This is used when column has been added to this bucket.

void casacore::SSMIndex::addRow ( rownr_t  aNrRows)

Add some rows.

Int casacore::SSMIndex::deleteRow ( rownr_t  aRowNumber)

Delete the given row.

It returns the bucket nr if it gets empty, otherwise -1.

void casacore::SSMIndex::find ( rownr_t  aRowNumber,
uInt aBucketNr,
rownr_t aStartRow,
rownr_t anEndRow,
const String colName 
) const

Find the bucket containing the given row.

An exception is thrown if not found. It also sets the first and last row number fitting in that bucket.

void casacore::SSMIndex::get ( AipsIO anOs)

Read the bucket index from the AipsIO object.

Vector<uInt> casacore::SSMIndex::getBuckets ( ) const

Return all the bucketnrs used in this index.

Int casacore::SSMIndex::getFree ( Int anOffset,
uInt  nbits 
) const

Try to find free space for a field with a given length (best fit).

-1 is returned if no fit is found. Otherwise it returns the nr of bytes left unused.

uInt casacore::SSMIndex::getIndex ( rownr_t  aRowNr,
const String colName 
) const
private

Get the index of the bucket containing the given row.

uInt casacore::SSMIndex::getNrBuckets ( ) const

Return the nr of buckets used.

uInt casacore::SSMIndex::getRowsPerBucket ( ) const
inline

Get the number of rows that fits in ach bucket.

Definition at line 177 of file SSMIndex.h.

References itsRowsPerBucket.

void casacore::SSMIndex::put ( AipsIO anOs) const

Write the bucket index into the AipsIO object.

void casacore::SSMIndex::recreate ( )

Recreate the object in case all rows are deleted from the table.

Int casacore::SSMIndex::removeColumn ( Int  anOffset,
uInt  nbits 
)

A column is removed.

Set the free space at offset for a field with the given nr of bits. It returns the nr of columns still used in this index.

void casacore::SSMIndex::setNrColumns ( Int  aNrColumns,
uInt  aSizeUsed 
)

Set nr of columns use this index.

void casacore::SSMIndex::showStatistics ( ostream &  anOs) const

Show Statistics of index.

Member Data Documentation

Block<uInt> casacore::SSMIndex::itsBucketNumber
private

Definition at line 164 of file SSMIndex.h.

std::map<Int,Int> casacore::SSMIndex::itsFreeSpace
private

Definition at line 167 of file SSMIndex.h.

Block<rownr_t> casacore::SSMIndex::itsLastRow
private

Definition at line 159 of file SSMIndex.h.

Int casacore::SSMIndex::itsNrColumns
private

Definition at line 173 of file SSMIndex.h.

uInt casacore::SSMIndex::itsNUsed
private

Definition at line 156 of file SSMIndex.h.

uInt casacore::SSMIndex::itsRowsPerBucket
private

Definition at line 170 of file SSMIndex.h.

Referenced by getRowsPerBucket().

SSMBase* casacore::SSMIndex::itsSSMPtr
private

Definition at line 153 of file SSMIndex.h.


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