BaseMappedArrayEngine.h

Classes

BaseMappedArrayEngine -- Templated virtual column engine for a table array of any type. (full description)

template<class VirtualType, class StoredType> class BaseMappedArrayEngine : public VirtualColumnEngine, public VirtualArrayColumn<VirtualType>

Interface

Public Members
virtual Bool canAddRow() const
virtual Bool canRemoveRow() const
const String& virtualName() const
const String& storedName() const
virtual Bool isWritable() const
Protected Members
BaseMappedArrayEngine (const String& virtualColumnName, const String& storedColumnName)
~BaseMappedArrayEngine()
BaseMappedArrayEngine()
BaseMappedArrayEngine (const BaseMappedArrayEngine<VirtualType, StoredType>&)
void setWritable (Bool isWritable)
void setNames (const String& virtualName, const String& storedName)
inline ROArrayColumn<StoredType>& roColumn()
inline ArrayColumn<StoredType>& rwColumn()
virtual DataManagerColumn* makeIndArrColumn (const String& columnName, int dataType, const String& dataTypeId)
virtual void create (uInt initialNrrow)
virtual void prepare()
void prepare1()
void prepare2()
virtual void reopenRW()
virtual void addRow (uInt nrrow)
virtual void addRowInit (uInt startRow, uInt nrrow)
virtual void removeRow (uInt rownr)
virtual void setShapeColumn (const IPosition& shape)
virtual void setShape (uInt rownr, const IPosition& shape)
virtual Bool isShapeDefined (uInt rownr)
virtual uInt ndim (uInt rownr)
virtual IPosition shape (uInt rownr)
virtual Bool canChangeShape() const
TableColumn makeTableColumn (const String& columnName)
Private Members
BaseMappedArrayEngine<VirtualType, StoredType>& operator= (const BaseMappedArrayEngine<VirtualType, StoredType>&)

Description

Review Status

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

Prerequisite

Etymology

BaseMappedArrayEngine contains for the 1-1 mapping of a virtual column to a stored column (both containing arrays).

Synopsis

BaseMappedArrayEngine is an abstract base class for virtual column engines which map data from the arrays in the virtual column to the arrays in the stored column. Note the the stored column does not need to be stored; it can be another virtual column, but usually it will be a stored column. Examples of classes using this base class are ScaledArrayEngine and RetypedArrayEngine.

The virtual column has to be bound to the virtual column engine used for it. The stored column will usually be bound to a storage manager, but any other suitable data manager is possible. E.g. it is possible to use MappedArrayEngine<StokesVector,float> to map a StokesVector to a float column, which in its turn uses ScaledArrayEngine<float,Int> to store it as integers. Note that the names of the virtual and stored column have to be different, otherwise the table system cannot distinguish them.

This base class does several tasks for the derived classes. The main one is to keep and handle the information about the virtual and stored column. The name of the stored column is written as a keyword in the virtual column. In this way the stored column is known when a table is read back. It also creates (RO)ArrayColumn<T> objects to access the stored column. The function roColumn gives read access, while rwColumn gives write access.

An engine object should be used for one column only, because the stored column name is part of the engine. If it would be used for more than one column, they would all share the same stored column. When the engine is bound to a column, it is checked if the name of that column matches the given virtual column name.

The engine can be used for a column containing any kind of array (thus direct or indirect, fixed or variable shaped)) as long as the virtual array can be stored in the stored array. Thus a fixed shaped virtual can use a variable shaped stored, but not vice versa. A fixed shape indirect virtual can use a stored with direct arrays.

The DataManager framework contains various virtual functions. This class implements several, but not all of them. Furthermore some implementations may not be optimal or correct for derived classes. Hereafter follows a list of functions which may need implementation in derived classes. The classes mentioned in the examples below show implementations of these functions.

Example

The derived classes ScaledArrayEngine and RetypedArrayEngine are two examples of how to derive a class from this base class. Note that ScaledArrayEngine does not need to implement functions dealing with shapes, because it can use them from this base class. On the other hand they need to be implemented in RetypedArrayEngine.

Motivation

This base class implements several functions making the implementation of derived classes simpler. Many details are implemented here, so often only the basic mapping functions (get, put) need to be implemented in a derived class.

Template Type Argument Requirements (VirtualType)

Template Type Argument Requirements (StoredType)

Member Description

virtual Bool canAddRow() const

Adding rows is possible for this engine.

virtual Bool canRemoveRow() const

Deleting rows is possible for this engine.

const String& virtualName() const

Get the virtual column name.

const String& storedName() const

Get the stored column name.

virtual Bool isWritable() const

The column is writable if the underlying stored column is writable.

BaseMappedArrayEngine (const String& virtualColumnName, const String& storedColumnName)

Construct an engine to convert the virtual column to the stored column. StoredColumnName is the name of the column where the converted data will be put and must have data type StoredType. The virtual column using this engine must have data type VirtualType. By default the virtual column is assumed to be writable. Use setWritable to unset it.

~BaseMappedArrayEngine()

Destructor is mandatory.

BaseMappedArrayEngine()

The default constructor is required for reconstruction of the engine when a table is read back.

BaseMappedArrayEngine (const BaseMappedArrayEngine<VirtualType, StoredType>&)

Copy constructor is only used by copy constructor of derived classes. (so it is made protected).

void setWritable (Bool isWritable)

Set if the column is writable or not.

void setNames (const String& virtualName, const String& storedName)

Set the virtual and stored column name.

inline ROArrayColumn<StoredType>& roColumn()

Give readonly access to the stored column. This can be used by the derived classes to get data.

inline ArrayColumn<StoredType>& rwColumn()

Give read/write access to the stored column. This can be used by the derived classes to put data.

virtual DataManagerColumn* makeIndArrColumn (const String& columnName, int dataType, const String& dataTypeId)

Create the column object for the array column in this engine. It will check if the given column name matches the virtual column name. This assures that the engine is bound to the correct column.

virtual void create (uInt initialNrrow)

Initialize the object for a new table. It defines a virtual column keyword telling the stored column name. Initially the table has the given number of rows. A derived class can have its own create function, but that should always call this create function.

virtual void prepare()

Preparing consists of setting the writable switch and adding the initial number of rows in case of create. It reads the stored column name from the virtual column keywords. A derived class can have its own prepare function, but that should always call this prepare function.

void prepare1()
void prepare2()

Do the 2 stages of the prepare (define columns and adding rows).

virtual void reopenRW()

Reopen the engine for read/write access. It makes the column writable if the underlying column is writable.

virtual void addRow (uInt nrrow)
virtual void addRowInit (uInt startRow, uInt nrrow)

Rows are added to the end of the table. If the virtual column has FixedShape arrays and the stored not, the shape in each stored row will be set. This assures that the arrays are properly defined in each row, so putSlice can be used without problems.
The second version is used by prepare2, because in case a column is added to an already existing table, table.nrow() gives the existing number of columns instead of 0.

virtual void removeRow (uInt rownr)

Deleting rows is possible and is a no-op for this engine.

virtual void setShapeColumn (const IPosition& shape)

Set the shape of the FixedShape arrays in the column. This function only gets called if the column has FixedShape arrays. The shape gets saved and used to set the shape of the arrays in the stored in case the stored has non-FixedShape arrays. This implementation assumes the shape of virtual and stored arrays are the same. If not, it has to be overidden in a derived class.

virtual void setShape (uInt rownr, const IPosition& shape)

Define the shape of the array in the given row. It will define the shape of the (underlying) array. This implementation assumes the shape of virtual and stored arrays are the same. If not, it has to be overidden in a derived class.

virtual Bool isShapeDefined (uInt rownr)

Test if the (underlying) array is defined in the given row.

virtual uInt ndim (uInt rownr)

Get the dimensionality of the (underlying) array in the given row. This implementation assumes the dimensionality of virtual and stored arrays are the same. If not, it has to be overidden in a derived class.

virtual IPosition shape (uInt rownr)

Get the shape of the (underlying) array in the given row. This implementation assumes the shape of virtual and stored arrays are the same. If not, it has to be overidden in a derived class.

virtual Bool canChangeShape() const

The data manager can handle changing the shape of an existing array when the underlying stored column can do it.

TableColumn makeTableColumn (const String& columnName)

Make a table column object for the given column. This has to be used in the create function, otherwise it could not create a TableColumn object to store data in the column keywords.

BaseMappedArrayEngine<VirtualType, StoredType>& operator= (const BaseMappedArrayEngine<VirtualType, StoredType>&)

Assignment is not needed and therefore forbidden (so it is made private and not implemented).