ScaColDesc.h
Classes
- ScalarColumnDesc -- Templated class to define columns of scalars in tables (full description)
template<class T> class ScalarColumnDesc : public BaseColumnDesc
Interface
- Public Members
- ScalarColumnDesc (const String& name, int options = 0)
- ScalarColumnDesc (const String& name, const String& comment, int options = 0)
- ScalarColumnDesc (const String& name, const String& comment, const String& dataManName, const String& dataManGroup, int options = 0)
- ScalarColumnDesc (const String& name, const String& comment, const String& dataManName, const String& dataManGroup, const T& defaultValue, int options = 0)
- ScalarColumnDesc (const ScalarColumnDesc<T>&)
- ~ScalarColumnDesc()
- ScalarColumnDesc<T>& operator= (const ScalarColumnDesc<T>&)
- BaseColumnDesc* clone() const
- Bool isScalar() const
- String className() const
- void setDefault (const T& defaultValue)
- const T& defaultValue() const
- PlainColumn* makeColumn (ColumnSet*)
- void show() const
- Private Members
- ScalarColumnDesc (SimpleOrderedMap<String, BaseColumnDesc* (*)(const String&, AipsIO&)>&)
- static BaseColumnDesc* makeDesc (const String& name, AipsIO&)
- ScalarColumnDesc (AipsIO&)
- void putDesc (AipsIO&) const
Review Status
- Reviewed By:
- Gareth Hunt
- Date Reviewed:
- 94Nov17
Prerequisite
Etymology
This class builds descriptions of table columns where each cell (which
may also be called a row) will hold a scalar value.
Synopsis
ScalarColumnDesc is a templated class for defining a
table column containing scalar values.
The table values are handled by a data manager. This can be
a storage manager to store the values in a file or it can be
a virtual column engine to calculate them on-the-fly.
Only the basic data types are allowed when storing in a file. These are:
Bool, uChar, Int, uInt, float, double, Complex, DComplex and String.
At table creation time (when a table gets created from a table
description), each column needs to be bound to a data manager.
If not done explicitly, the table system will bind a column to the
default data manager defined in the column description.
A scalar column description consists of the following attributes:
- Name, which has to be unique and must also be different
from possible table keyword names.
- Data type, which is determined by the template parameter
(e.g. ArrayColumnDesc).
- Comment, which defaults to an empty string.
This serves purely as an informational string for the user.
- Default value, which defaults to the undefined value
defined in ValType.h.
When a row gets added to a table, it is possible to
initialize the column fields in the row with this default value.
- Default data manager, which will be used if a column
for a newly created table is not explicitly bound to a
data manager.
- Data manager group, which serves 2 purposes.
Firstly it can be used in class SetupNewTable to bind a group
of columns.
Secondly, when the default data managers are used, it
allows, for example, to have 2 AipsIO storage managers.
One for one group of columns and one for another group of columns.
- Options. These are defined in ColumnDesc.h and can be combined
by or-ing them.
Currently only the Undefined flag applies to scalars.
- Default keyword set, which defaults to an empty set.
When a table column gets created from the description, it gets
a copy of this keyword set as its initial keyword set.
There are several constructors, which allow to define most
of the above mentioned attributes. Others, like the default keyword
set, have to be defined explicitly.
This class is derived from BaseColumnDesc, thus the functions
in there also apply to this class.
Once a column description is setup satisfactorily, it must be added
to a table description before it can be used by the table system.
Example
TableDesc tabDesc("tTableDesc", "1", TableDesc::New);
// Add a scalar integer column ac, define keywords for it
// and define a default value 0.
ScalarColumnDesc<Int> acColumn("ac");
acColumn.keywordSet().keysComplex()("scale") = 0;
acColumn.keywordSet().keysString()("unit") = "";
acColumn.setDefault (0);
tabDesc.addColumn (acColumn);
// Add another column, now with data type String..
// This can be added directly, because no special things like
// keywords or default values have to be set.
tabDesc.addColumn (ScalarColumnDesc<String>("name", "comments"));
Motivation
Several column description classes are needed to allow the user
to define attributes which are special for each column type.
For scalars the special attribute is the default value.
They all have to be templated to support arbitrary data types.
To Do
Member Description
ScalarColumnDesc (const String& name, int options = 0)
Construct the column with the given name.
The data manager type defaults to the StManAipsIO storage manager.
The data manager group defaults to the data manager type.
The possible options are defined in ColumnDesc.h.
ScalarColumnDesc (const String& name, const String& comment, int options = 0)
Construct the column with the given name and comment.
The data manager type defaults to the StManAipsIO storage manager.
The data manager group defaults to the data manager type.
The possible options are defined in ColumnDesc.h.
ScalarColumnDesc (const String& name, const String& comment, const String& dataManName, const String& dataManGroup, int options = 0)
Construct the column with the given name, comment, and
default data manager type and group.
A blank data manager group defaults to the data manager type.
The possible options are defined in ColumnDesc.h.
ScalarColumnDesc (const String& name, const String& comment, const String& dataManName, const String& dataManGroup, const T& defaultValue, int options = 0)
Construct the column with the given name, comment, default
data manager type and group, and default value.
A blank data manager group defaults to the data manager type.
The possible options are defined in ColumnDesc.h.
Copy constructor (copy semantics);
ScalarColumnDesc<T>& operator= (const ScalarColumnDesc<T>&)
Assignment (copy semantics);
BaseColumnDesc* clone() const
Clone this column description.
The column is a scalar.
Get the name of this class. It is used by the registration process.
The template argument gets part of the name.
void setDefault (const T& defaultValue)
Set the default value.
Get the default value.
PlainColumn* makeColumn (ColumnSet*)
Create a Column object out of this.
This is used by class ColumnSet to construct a table column object.
void show() const
Show the column.
ScalarColumnDesc (SimpleOrderedMap<String, BaseColumnDesc* (*)(const String&, AipsIO&)>&)
default value
The purpose of this constructor is to register the makeDesc
function of this class and map it to a name.
ColumnReg.cc registers such functions by using these constructors.
static BaseColumnDesc* makeDesc (const String& name, AipsIO&)
Create the object from AipsIO (this function is registered).
Construct object from AipsIO (used by makeDesc).
void putDesc (AipsIO&) const
Put the object.
Copyright © 1995 Associated Universities Inc., Washington, D.C.