TableKeyword.h
Classes
- TableKeyword -- Keyword value representing a table (full description)
Interface
- Public Members
- TableKeyword (const String& tableDescName)
- TableKeyword (const Table& table, const String& tableDescName)
- TableKeyword (const TableKeyword& that)
- TableKeyword& operator= (const TableKeyword& that)
- TableKeyword& operator= (const Table& table)
- ~TableKeyword()
- void set (const String& name, const TableAttr& parentAttr)
- void setRW()
- Bool isMultiUsed (Bool checkSubTables) const
- const String& tableName() const
- String tableName (const String& parentName) const
- String tableName (const TableAttr& parentAttr) const
- Table table() const
- const TableAttr& tableAttributes() const
- void setTableAttributes (const TableAttr& attr)
- void close() const
- void flush (Bool fsync) const
- void renameTable (const String& newParentName, const String& oldParentName)
- Bool conform (const TableKeyword& that) const
- Bool conform (const Table& that) const
- Bool isFixed() const
Review Status
- Reviewed By:
- Mark Wieringa
- Date Reviewed:
- 1996/04/15
- Programs:
- Tests:
Prerequisite
Synopsis
TableKeyword represents a record keyword field containing a table.
It is used by class TableRecord, which in its turn is meant to be
used by the Table class.
It serves the following purposes:
- A table is only opened on demand, i.e. when the keyword
is accessed for the first time. When opened, the function
closeTable makes it possible to close a table when not
needed anymore (provided the table is not used elsewhere).
It will automatically be reopened when used again.
- A switch is maintained which indicates if the table
should be opened as readonly or read/write.
A table is opened as read/write when the switch is read/write and
when the table is writable. Otherwise it is opened as readonly.
When a parent table is read back, its TableKeyword's will be
read back and the switch will be set to the access-mode
(readonly or read/write) of the parent table.
When a new table is inserted, the access-mode is taken from the table.
- When the parent table is reopened as read/write, the table in
this object will also be reopened as read/write (if the table is
writable).
- When a TableKeyword gets written, only the table name will be
written. Reading it back will set the correct access-mode, while
the table will not be opened until necessary.
However, when reading a parent table back it is possible that it
is done from a different directory than where it was created.
Therefore the directory of the parent table is prepended to the
TableKeyword subtable name. Similarly, when written it is stripped off.
E.g. parent table XX and subtable SUB are created in the working
directory WD. Reading back is done from another directory by
specifying WD/XX. WD will be prepended to SUB.
Motivation
This class provides the extra functionality for keywords containing
tables. This is needed because tables are much more complex entities
than scalars or arrays.
Example
// Store a table in the keyword set.
void someFunc (const Table& subTable)
{
// Open the table and get access to the table keyword set.
Table table("table.data", Table::Update);
TableRecord& keyset = table.rwKeywordSet();
keyset.defineTable ("KeyTab", subTable);
}
// Open the table and get the table from keyword KeyTab.
// It shows that this can be done in one statement.
Table table("table.data");
Table subTab = table.keywordSet().asTable ("KeyTab");
Member Description
Construct a TableKeyword with the given tableDescName.
When the tableDescName is empty the keyword is variable structured.
Otherwise it is fixed structured, meaning that only tables with a
description of that name can be assigned to this keyword.
Construct a TableKeyword from a Table.
When the tableDescName is empty the keyword is variable structured.
Otherwise it is fixed structured, meaning that only tables with a
description of that name can be assigned to this keyword.
TableKeyword (const TableKeyword& that)
Copy constructor (full copy semantics).
TableKeyword& operator= (const TableKeyword& that)
TableKeyword& operator= (const Table& table)
Assignment (leaves tableDescName_p untouched).
This is only possible when both objects conform.
void set (const String& name, const TableAttr& parentAttr)
Set the name of the table and the writable switch.
This is used when reading back a keyword.
Set the keyword to read/write access.
If the table is already open, it will be reopened with read/write
access if the table is writable.
Bool isMultiUsed (Bool checkSubTables) const
Is the table in use in another process?
If checkSubTables is set, it is also checked if
a subtable is used in another process.
Get the name of the table.
Get the name of the table relative to parent table.
Get the table.
It will be opened when necessary.
Get the table attributes.
Set the table attributes.
void close() const
Close the table.
void flush (Bool fsync) const
Flush and optionally fsync the table.
void renameTable (const String& newParentName, const String& oldParentName)
Rename the table if its path contains the old parent table name.
Bool conform (const TableKeyword& that) const
Bool conform (const Table& that) const
Test if the table in other conforms this table keyword.
It conforms when this description name is blank or matches the
table description name of the other.
Has the table a fixed description name?
It has when its description name is not empty.