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::SSMStringHandler Class Reference

Store strings in the Standard Storage Manager. More...

#include <SSMStringHandler.h>

Public Member Functions

 SSMStringHandler (SSMBase *aBase)
 Default constructor initializes last string bucket to -1. More...
 
 ~SSMStringHandler ()
 
void setLastStringBucket (Int lastStringBucket)
 Set or get last string bucketnr. More...
 
Int lastStringBucket () const
 
void put (Int &bucketNr, Int &offset, Int &length, const String &string)
 Put a single string or an array of strings into a bucket. More...
 
void put (Int &bucketNr, Int &offset, Int &length, const Array< String > &string, Bool handleShape)
 
void putShape (Int &bucketNr, Int &offset, Int &length, const IPosition &aShape)
 Put a single string or an array of strings into a bucket. More...
 
void getShape (IPosition &aShape, Int bucket, Int &offset, Int length)
 Get the shape in the given bucket and offset. More...
 
void remove (Int bucketNr, Int offset, Int length)
 Remove data with the given length from a bucket. More...
 
void get (String &string, Int bucket, Int offset, Int length)
 Get a string or an array of strings. More...
 
void get (Array< String > &string, Int bucket, Int offset, Int length, Bool handleShape)
 
void flush ()
 Flush the currently used string bucket. More...
 
void init ()
 Initialize the StringHandler. More...
 
void resync ()
 Resynchronize (after a table lock was acquired). More...
 

Private Member Functions

 SSMStringHandler (const SSMStringHandler &)
 Forbid copy constructor and assignment. More...
 
SSMStringHandleroperator= (const SSMStringHandler &)
 
void getBucket (uInt bucketNr, Bool isNew=False)
 Get the given bucket and make it current. More...
 
void getNewBucket (Bool doConcat)
 Get a new bucket and make it current. More...
 
void putData (Int length, const Char *data)
 Put the data with the given length at the end of the current bucket. More...
 
void getData (Int length, Char *data, Int &offset)
 Get the data with the given length from the curent bucket at the given offset. More...
 
void replace (Int bucketNr, Int offset, Int length, const String &string)
 Replace the current data with the new data. More...
 
void replace (Int bucketNr, Int offset, Int length, Int totalLength, const IPosition &aShape)
 
void replace (Int bucketNr, Int offset, Int length, Int totalLength, const Array< String > &string, Bool handleShape)
 
void replaceData (Int &offset, Int length, const Char *data)
 

Private Attributes

SSMBaseitsSSMPtr
 
Int itsCurrentBucket
 
Int itsLength
 
Int itsNDeleted
 
Int itsUsedLength
 
Int itsNextBucket
 
char * itsData
 
char * itsIntBuf
 
Bool isChanged
 
uInt itsIntSize
 
Int itsLastBucket
 
uInt itsStart
 

Detailed Description

Store strings in the Standard Storage Manager.

Intended use:

Internal

Review Status

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

Prerequisite

Etymology

SSMStringHandler handles strings for the Standard Storage Manager.

Synopsis

Variable length strings cannot be stored in the data bucket. Only short (<8 characters) strings can be stored directly. Class SSMStringhandler is used by the SSM to store strings in so-called string buckets. A string bucket has the following layout:

SSMStringHandler keeps a copy of the current bucket in use to reduce the number of accesses to the bucket cache.

It also keeps the bucket number of the last bucket where data were added to. It tells which bucket to use when new data has to be stored.

Definition at line 120 of file SSMStringHandler.h.

Constructor & Destructor Documentation

casacore::SSMStringHandler::SSMStringHandler ( SSMBase aBase)

Default constructor initializes last string bucket to -1.

casacore::SSMStringHandler::~SSMStringHandler ( )
casacore::SSMStringHandler::SSMStringHandler ( const SSMStringHandler )
private

Forbid copy constructor and assignment.

Member Function Documentation

void casacore::SSMStringHandler::flush ( )

Flush the currently used string bucket.

void casacore::SSMStringHandler::get ( String string,
Int  bucket,
Int  offset,
Int  length 
)

Get a string or an array of strings.

The array must have the correct shape. handleShape will be True for variable shaped arrays indicating that the data are preceeded by the shape.

void casacore::SSMStringHandler::get ( Array< String > &  string,
Int  bucket,
Int  offset,
Int  length,
Bool  handleShape 
)
void casacore::SSMStringHandler::getBucket ( uInt  bucketNr,
Bool  isNew = False 
)
private

Get the given bucket and make it current.

It first writes the current bucket if it has changed.
If isNew is True the bucket is new, so the Ints at its beginning do not have to be interpreted.

void casacore::SSMStringHandler::getData ( Int  length,
Char data,
Int offset 
)
private

Get the data with the given length from the curent bucket at the given offset.

If sets the offset to the byte after the data read. Continuation buckets are followed (and made current).

void casacore::SSMStringHandler::getNewBucket ( Bool  doConcat)
private

Get a new bucket and make it current.

If doConcat is True, the new bucket is a continuation, so itsNextBucket in the currently used bucket is filled with the new bucket number.

void casacore::SSMStringHandler::getShape ( IPosition aShape,
Int  bucket,
Int offset,
Int  length 
)

Get the shape in the given bucket and offset.

It sets the offset to the data right after the shape. The IPosition object is resized as needed.

void casacore::SSMStringHandler::init ( )

Initialize the StringHandler.

Int casacore::SSMStringHandler::lastStringBucket ( ) const
inline

Definition at line 256 of file SSMStringHandler.h.

References itsLastBucket.

Referenced by setLastStringBucket().

SSMStringHandler& casacore::SSMStringHandler::operator= ( const SSMStringHandler )
private
void casacore::SSMStringHandler::put ( Int bucketNr,
Int offset,
Int length,
const String string 
)

Put a single string or an array of strings into a bucket.

If its length does not exceed the given length, it reuses the currently used space (given by bucketnr and offset). Otherwise it adds the data to the last string bucket. It fills the offset and bucketnr where the data are stored and the length occupied in the buckets. An array of strings is flattened first (a la SSMColumn::writeString).
If handleShape is True (for variable shaped arrays), the shape will be put first.

void casacore::SSMStringHandler::put ( Int bucketNr,
Int offset,
Int length,
const Array< String > &  string,
Bool  handleShape 
)
void casacore::SSMStringHandler::putData ( Int  length,
const Char data 
)
private

Put the data with the given length at the end of the current bucket.

If they do not fit, they are continued in a new bucket.

void casacore::SSMStringHandler::putShape ( Int bucketNr,
Int offset,
Int length,
const IPosition aShape 
)

Put a single string or an array of strings into a bucket.

If its length does not exceed the given length, it reuses the currently used space (given by bucketnr and offset). Otherwise it adds the data to the last string bucket. It fills the offset and bucketnr where stored and the length occupied in the buckets.

void casacore::SSMStringHandler::remove ( Int  bucketNr,
Int  offset,
Int  length 
)

Remove data with the given length from a bucket.

If the data are continued in next bucket(s), they will be removed there as well.

void casacore::SSMStringHandler::replace ( Int  bucketNr,
Int  offset,
Int  length,
const String string 
)
private

Replace the current data with the new data.

It is used by put after having assured that the new length does not exceed the current one. It follows continuation buckets as needed.

void casacore::SSMStringHandler::replace ( Int  bucketNr,
Int  offset,
Int  length,
Int  totalLength,
const IPosition aShape 
)
private
void casacore::SSMStringHandler::replace ( Int  bucketNr,
Int  offset,
Int  length,
Int  totalLength,
const Array< String > &  string,
Bool  handleShape 
)
private
void casacore::SSMStringHandler::replaceData ( Int offset,
Int  length,
const Char data 
)
private
void casacore::SSMStringHandler::resync ( )

Resynchronize (after a table lock was acquired).

It clears the itsCurrentBucket variable to assure that buckets are reread.

void casacore::SSMStringHandler::setLastStringBucket ( Int  lastStringBucket)
inline

Set or get last string bucketnr.

Setting is needed when an existing table is opened.

Definition at line 251 of file SSMStringHandler.h.

References itsLastBucket, and lastStringBucket().

Member Data Documentation

Bool casacore::SSMStringHandler::isChanged
private

Definition at line 244 of file SSMStringHandler.h.

Int casacore::SSMStringHandler::itsCurrentBucket
private

Definition at line 237 of file SSMStringHandler.h.

char* casacore::SSMStringHandler::itsData
private

Definition at line 242 of file SSMStringHandler.h.

char* casacore::SSMStringHandler::itsIntBuf
private

Definition at line 243 of file SSMStringHandler.h.

uInt casacore::SSMStringHandler::itsIntSize
private

Definition at line 245 of file SSMStringHandler.h.

Int casacore::SSMStringHandler::itsLastBucket
private

Definition at line 246 of file SSMStringHandler.h.

Referenced by lastStringBucket(), and setLastStringBucket().

Int casacore::SSMStringHandler::itsLength
private

Definition at line 238 of file SSMStringHandler.h.

Int casacore::SSMStringHandler::itsNDeleted
private

Definition at line 239 of file SSMStringHandler.h.

Int casacore::SSMStringHandler::itsNextBucket
private

Definition at line 241 of file SSMStringHandler.h.

SSMBase* casacore::SSMStringHandler::itsSSMPtr
private

Definition at line 236 of file SSMStringHandler.h.

uInt casacore::SSMStringHandler::itsStart
private

Definition at line 247 of file SSMStringHandler.h.

Int casacore::SSMStringHandler::itsUsedLength
private

Definition at line 240 of file SSMStringHandler.h.


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