casacore
NullTable.h
Go to the documentation of this file.
1//# NullTable.h: Class indicating a null Table object
2//# Copyright (C) 2001,2002,2003
3//# Associated Universities, Inc. Washington DC, USA.
4//#
5//# This library is free software; you can redistribute it and/or modify it
6//# under the terms of the GNU Library General Public License as published by
7//# the Free Software Foundation; either version 2 of the License, or (at your
8//# option) any later version.
9//#
10//# This library is distributed in the hope that it will be useful, but WITHOUT
11//# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12//# FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
13//# License for more details.
14//#
15//# You should have received a copy of the GNU Library General Public License
16//# along with this library; if not, write to the Free Software Foundation,
17//# Inc., 675 Massachusetts Ave, Cambridge, MA 02139, USA.
18//#
19//# Correspondence concerning AIPS++ should be addressed as follows:
20//# Internet email: aips2-request@nrao.edu.
21//# Postal address: AIPS++ Project Office
22//# National Radio Astronomy Observatory
23//# 520 Edgemont Road
24//# Charlottesville, VA 22903-2475 USA
25//#
26//# $Id$
27
28#ifndef TABLES_NULLTABLE_H
29#define TABLES_NULLTABLE_H
30
31
32//# Includes
33#include <casacore/casa/aips.h>
34#include <casacore/tables/Tables/BaseTable.h>
35#include <casacore/tables/Tables/TableError.h>
36
37
38namespace casacore { //# NAMESPACE CASACORE - BEGIN
39
40// <summary>
41// Class indicating a null Table object
42// </summary>
43
44// <use visibility=local>
45
46// <reviewed reviewer="UNKNOWN" date="before2004/08/25" tests="">
47// </reviewed>
48
49// <prerequisite>
50//# Classes you should understand before using this one.
51// <li> <linkto class=BaseTable>BaseTable</linkto>
52// </prerequisite>
53
54// <etymology>
55// NullTable represents a null table object, i.e. a Table object without
56// an underlying table.
57// </etymology>
58
59// <synopsis>
60// NullTable is used to represent a null table.
61// The default Table constructor used to a create a null pointer
62// which resulted in core dumps when the Table object was actually used.
63// The NullTable object makes it possible to catch such cases
64// and throw an appropriate exception.
65// </synopsis>
66
67
68class NullTable : public BaseTable
69{
70public:
71 // Default constructor.
73
74 virtual ~NullTable();
75
76 // The table is a null table.
77 virtual Bool isNull() const override;
78
79 // All functions throw a "null table" exception.
80 // <group>
81 virtual void reopenRW() override;
82 virtual Bool asBigEndian() const override;
83 virtual const StorageOption& storageOption() const override;
84 virtual Bool isMultiUsed (Bool checkSubTable) const override;
85 virtual const TableLock& lockOptions() const override;
86 virtual void mergeLock (const TableLock& lockOptions) override;
87 virtual Bool hasLock (FileLocker::LockType) const override;
88 virtual Bool lock (FileLocker::LockType, uInt nattempts) override;
89 virtual void unlock() override;
90 virtual void flush (Bool fsync, Bool recursive) override;
91 virtual void resync() override;
92 virtual uInt getModifyCounter() const override;
93 virtual Bool isWritable() const override;
94 virtual void deepCopy (const String& newName,
96 const StorageOption&,
97 int tableOption,
98 Bool valueCopy,
99 int endianFormat,
100 Bool noRows) const override;
101 virtual TableDesc actualTableDesc() const override;
102 virtual Record dataManagerInfo() const override;
103 virtual TableRecord& keywordSet() override;
104 virtual TableRecord& rwKeywordSet() override;
105 virtual BaseColumn* getColumn (uInt columnIndex) const override;
106 virtual BaseColumn* getColumn (const String& columnName) const override;
107 virtual Bool canAddRow() const override;
108 virtual void addRow (rownr_t nrrow, Bool initialize) override;
109 virtual Bool canRemoveRow() const override;
110 virtual void removeRow (rownr_t rownr) override;
111 virtual DataManager* findDataManager (const String& name,
112 Bool byColumn) const override;
113 virtual void addColumn (const ColumnDesc& columnDesc, Bool addToParent) override;
114 virtual void addColumn (const ColumnDesc& columnDesc,
115 const String& dataManager, Bool byName,
116 Bool addToParent) override;
117 virtual void addColumn (const ColumnDesc& columnDesc,
118 const DataManager& dataManager, Bool addToParent) override;
119 virtual void addColumn (const TableDesc& tableDesc,
120 const DataManager& dataManager, Bool addToParent) override;
121 virtual Bool canRemoveColumn (const Vector<String>& columnNames) const override;
122 virtual void removeColumn (const Vector<String>& columnNames) override;
123 virtual Bool canRenameColumn (const String& columnName) const override;
124 virtual void renameColumn (const String& newName, const String& oldName) override;
125 virtual void renameHypercolumn (const String& newName,
126 const String& oldName) override;
127 virtual Vector<rownr_t> rowNumbers() const override;
128 virtual BaseTable* root() override;
129 virtual Bool rowOrder() const override;
130 virtual Vector<rownr_t>* rowStorage() override;
131 virtual Bool adjustRownrs (rownr_t nrrow, Vector<rownr_t>& rownrs,
132 Bool determineOrder) const override;
135 const Block<Int>& sortOrder,
136 int sortOption,
137 std::shared_ptr<Vector<rownr_t>> sortIterBoundaries,
138 std::shared_ptr<Vector<size_t>> sortIterKeyIdxChange) override;
139 virtual void renameSubTables (const String& newName,
140 const String& oldName) override;
141 // </group>
142
143private:
144 // Copy constructor is forbidden, because copying a table requires
145 // some more knowledge (like table name of result).
146 // Declaring it private, makes it unusable.
148
149 // Assignment is forbidden, because copying a table requires
150 // some more knowledge (like table name of result).
151 // Declaring it private, makes it unusable.
153
154 // Make an exception message with the name of the function.
155 TableError makeError (const String& name) const;
156};
157
158
159
160
161} //# NAMESPACE CASACORE - END
162
163#endif
const TableDesc & tableDesc() const
Get the table description.
Definition: BaseTable.h:272
int tableOption() const
Get the table option.
Definition: BaseTable.h:253
simple 1-D array
Definition: Block.h:200
Referenced counted pointer for constant data.
Definition: CountedPtr.h:81
Abstract base class for a data manager.
Definition: DataManager.h:221
LockType
Define the possible lock types.
Definition: FileLocker.h:95
virtual TableRecord & rwKeywordSet() override
Get read/write access to the table keyword set.
virtual void deepCopy(const String &newName, const Record &dataManagerInfo, const StorageOption &, int tableOption, Bool valueCopy, int endianFormat, Bool noRows) const override
virtual Record dataManagerInfo() const override
Get the data manager info.
virtual BaseColumn * getColumn(uInt columnIndex) const override
Get a column object using its index.
virtual TableDesc actualTableDesc() const override
Get the actual table description.
virtual BaseTable * doSort(PtrBlock< BaseColumn * > &, const Block< CountedPtr< BaseCompare > > &, const Block< Int > &sortOrder, int sortOption, std::shared_ptr< Vector< rownr_t > > sortIterBoundaries, std::shared_ptr< Vector< size_t > > sortIterKeyIdxChange) override
Do the actual sort.
NullTable(const NullTable &)
Copy constructor is forbidden, because copying a table requires some more knowledge (like table name ...
virtual void addColumn(const ColumnDesc &columnDesc, const DataManager &dataManager, Bool addToParent) override
virtual uInt getModifyCounter() const override
Get the modify counter.
virtual void unlock() override
Unlock the table.
virtual Bool canRemoveColumn(const Vector< String > &columnNames) const override
Test if columns can be removed.
virtual Bool canRenameColumn(const String &columnName) const override
Test if a column can be renamed.
virtual const TableLock & lockOptions() const override
Get the locking info.
NullTable()
Default constructor.
virtual TableRecord & keywordSet() override
Get readonly access to the table keyword set.
virtual Bool isNull() const override
The table is a null table.
virtual Vector< rownr_t > rowNumbers() const override
Get a vector of row numbers.
virtual Vector< rownr_t > * rowStorage() override
By the default the table cannot return the storage of rownrs.
virtual void renameSubTables(const String &newName, const String &oldName) override
Rename the subtables (used by rename function).
virtual void mergeLock(const TableLock &lockOptions) override
Merge the given lock info with the existing one.
virtual void addColumn(const ColumnDesc &columnDesc, const String &dataManager, Bool byName, Bool addToParent) override
virtual BaseColumn * getColumn(const String &columnName) const override
Get a column object using its name.
virtual void addColumn(const ColumnDesc &columnDesc, Bool addToParent) override
Add one or more columns to the table.
virtual Bool adjustRownrs(rownr_t nrrow, Vector< rownr_t > &rownrs, Bool determineOrder) const override
Adjust the row numbers to be the actual row numbers in the root table.
virtual Bool isWritable() const override
Test if this table is writable.
virtual void renameColumn(const String &newName, const String &oldName) override
Rename a column.
virtual void removeColumn(const Vector< String > &columnNames) override
Remove columns.
virtual void flush(Bool fsync, Bool recursive) override
Flush the table, i.e.
virtual Bool canAddRow() const override
Test if it is possible to add a row to this table.
virtual void addRow(rownr_t nrrow, Bool initialize) override
Add one or more rows and possibly initialize them.
virtual Bool hasLock(FileLocker::LockType) const override
Has this process the read or write lock, thus can the table be read or written safely?
virtual void removeRow(rownr_t rownr) override
Remove rows.
virtual Bool isMultiUsed(Bool checkSubTable) const override
Is the table in use (i.e.
virtual Bool lock(FileLocker::LockType, uInt nattempts) override
Try to lock the table for read or write access.
NullTable & operator=(const NullTable &)
Assignment is forbidden, because copying a table requires some more knowledge (like table name of res...
virtual void renameHypercolumn(const String &newName, const String &oldName) override
Rename a hypercolumn.
virtual void addColumn(const TableDesc &tableDesc, const DataManager &dataManager, Bool addToParent) override
virtual void resync() override
Resync the Table object with the table file.
virtual Bool rowOrder() const override
Tell if the table is in row order.
virtual DataManager * findDataManager(const String &name, Bool byColumn) const override
Find the data manager with the given name or for the given column.
virtual void reopenRW() override
All functions throw a "null table" exception.
virtual const StorageOption & storageOption() const override
Get the storage option used for the table.
virtual Bool asBigEndian() const override
Is the table stored in big or little endian format?
TableError makeError(const String &name) const
Make an exception message with the name of the function.
virtual Bool canRemoveRow() const override
Test if it is possible to remove a row from this table.
virtual BaseTable * root() override
Get pointer to root table (i.e.
A drop-in replacement for Block<T*>.
Definition: Block.h:814
String: the storage and methods of handling collections of characters.
Definition: String.h:225
this file contains all the compiler specific defines
Definition: mainpage.dox:28
unsigned int uInt
Definition: aipstype.h:51
bool Bool
Define the standard types used by Casacore.
Definition: aipstype.h:42
uInt64 rownr_t
Define the type of a row number in a table.
Definition: aipsxtype.h:46