ArrColDesc.h
Classes
- ArrayColumnDesc -- Templated class for description of table array columns (full description)
Interface
- Public Members
- explicit ArrayColumnDesc (const String& name, Int ndim = -1, int options = 0)
- ArrayColumnDesc (const String& name, const String& comment, Int ndim = -1, int options = 0)
- ArrayColumnDesc (const String& name, const String& comment, const String& dataManName, const String& dataManGroup, Int ndim = -1, int options = 0)
- ArrayColumnDesc (const String& name, const IPosition& shape, int options = 0)
- ArrayColumnDesc (const String& name, const String& comment, const IPosition& shape, int options = 0)
- ArrayColumnDesc (const String& name, const String& comment, const String& dataManName, const String& dataManGroup, const IPosition& shape, int options = 0, int ndim=-1)
- ArrayColumnDesc (const ArrayColumnDesc<T>&)
- ~ArrayColumnDesc()
- ArrayColumnDesc<T>& operator= (const ArrayColumnDesc<T>&)
- BaseColumnDesc* clone() const
- String className() const
- PlainColumn* makeColumn (ColumnSet*) const
- void show (ostream& os) const
- ArrayColumnDesc (SimpleOrderedMap<String, BaseColumnDesc* (*)(const String&)>&)
- Protected Members
- static BaseColumnDesc* makeDesc(const String& name)
- virtual void putDesc (AipsIO&) const
- virtual void getDesc (AipsIO&)
Review Status
- Reviewed By:
- Gareth Hunt
- Date Reviewed:
- 94Nov17
Prerequisite
- BaseColumnDesc (and its prerequisites)
- TableDesc
Etymology
This class builds descriptions of table columns where each cell (which
may also be called a row) will hold an array.
Synopsis
ArrayColumnDesc is a templated class for defining a table column
containing arrays.
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, Short, uShort, 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 manager defined in the column description.
An array 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).
- A data type id, which tells the unique name of non-standard
data types (i.e. for data type == TpOther).
- Comment, which defaults to the empty string.
This serves purely as an informational string for the user.
- Dimensionality. If given, all arrays in the column need
to have that dimensionality.
- Shape. If given, all arrays in the column need to have
that shape.
- Default data manager, which will be used if a column
for a newly created table is not explicitly bound to a
datamanager.
- 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 logically or-ing them.
-
ColumnDesc::FixedShape says that the arrays in all cells
of a column have the same shape. This shape must be defined
before a table is created. It does not tell if
the array is direct or indirect.
A FixedShape array is defined in every cell, while for
non-FixedShape arrays a cell can be empty.
-
ColumnDesc::Direct determines if an array is directly
stored in the table or if it is stored indirectly in a separate
file. Direct arrays enforce the FixedShape option.
Usually indirect arrays are only read in on command, while
direct arrays are held in memory. So the size of the
arrays is an important factor.
- 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 the definition of 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 set up 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);
// Now define array columns.
// This one is indirect and has no dimensionality mentioned yet.
// Define the keyword UNIT in it.
ArrayColumnDesc<Complex> arr1Column("Arr1", "comment for Arr1");
arr1Column.rwKeywordSet().define ("UNIT", "Jy");
tabDesc.addColumn (arr1Column);
// This one is indirect and has 3-dim arrays.
tabDesc.addColumn (ArrayColumnDesc<Int>("Arr2",
"comment for Arr2",
3));
// This one is direct and has 2-dim arrays with axis lengths 4 and 7.
tabDesc.addColumn (ArrayColumnDesc<uInt>("Arr3",
"comment for Arr1",
IPosition(2,4,7),
ColumnDesc::Direct));
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.
Template Type Argument Requirements (T)
- Default constructor
- Copy constructor
- Assignment operator
- static String dataTypeId(); // (not needed for builtin types)
This should return the unique "name" of the class.
Member Description
explicit ArrayColumnDesc (const String& name, Int ndim = -1, int options = 0)
Construct the column with the given name and dimensionality.
The data manager type defaults to the StandardStman storage manager.
The data manager group defaults to the data manager type.
Ndim <=0 means that the number of dimensions is free and will
be defined when creating the table (rows). Ndim>0 means that
the arrays in this column must have the given dimensionality.
The possible options are defined in ColumnDesc.h.
ArrayColumnDesc (const String& name, const String& comment, Int ndim = -1, int options = 0)
Construct the column with the given name, dimensionality, and comment.
The data manager type defaults to the StandardStman storage manager.
The data manager group defaults to the data manager type.
Ndim <=0 means that the number of dimensions is free and will
be defined when creating the table (rows). Ndim>0 means that
the arrays in this column must have the given dimensionality.
The possible options are defined in ColumnDesc.h.
ArrayColumnDesc (const String& name, const String& comment, const String& dataManName, const String& dataManGroup, Int ndim = -1, int options = 0)
Construct the column with the given name, dimensionality, comment,
and default data manager type and group.
A blank data manager group defaults to the data manager type.
Ndim <=0 means that the number of dimensions is free and will
be defined when creating the table (rows). Ndim>0 means that
the arrays in this column must have the given dimensionality.
The possible options are defined in ColumnDesc.h.
Construct the column with the given name and shape.
The data manager type defaults to the StandardStman storage manager.
The data manager group defaults to the data manager type.
The possible options are defined in ColumnDesc.h.
This constructor can only be used for FixedShape arrays, because the
shape of other arrays can only be set per row.
Construct the column with the given name, shape, and comment.
The data manager type defaults to the StandardStman storage manager.
The data manager group defaults to the data manager type.
The possible options are defined in ColumnDesc.h.
This constructor can only be used for FixedShape arrays, because the
shape of other arrays can only be set per row.
ArrayColumnDesc (const String& name, const String& comment, const String& dataManName, const String& dataManGroup, const IPosition& shape, int options = 0, int ndim=-1)
Construct the column with the given name, shape, 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.
This constructor can only be used for FixedShape arrays, because the
shape of other arrays can only be set per row.
If both ndim and shape are given as > 0, ndim should match the length
of shape.
Copy constructor (copy semantics);
ArrayColumnDesc<T>& operator= (const ArrayColumnDesc<T>&)
Assignment (copy semantics);
Clone this column description to another.
Get the name of this class. It is used by the registration process.
The template argument gets part of the name.
Create a Column object out of this.
This is used by class ColumnSet to construct a table column object.
void show (ostream& os) const
Show the column.
Construct the object to register its class.
Create the object from AipsIO (this function is registered).
Put the object.
Get the object.