casacore
Loading...
Searching...
No Matches
StokesIStMan.h
Go to the documentation of this file.
1#ifndef CASACORE_STOKES_I_STORAGE_MANAGER_H_
2#define CASACORE_STOKES_I_STORAGE_MANAGER_H_
3
4#include <casacore/tables/DataMan/DataManager.h>
5
6#include <casacore/casa/Containers/Record.h>
7
9
10#ifndef DOXYGEN_SHOULD_SKIP_THIS
11extern "C" {
12#endif
14#ifndef DOXYGEN_SHOULD_SKIP_THIS
15}
16#endif
17
18namespace casacore {
19
20class StokesIStManColumn;
21
26class StokesIStMan final : public casacore::DataManager {
27 public:
38
43 StokesIStMan(const StokesIStMan &source);
44
45 ~StokesIStMan() noexcept;
46
51 StokesIStMan &operator=(const StokesIStMan &source) = delete;
52
53 casacore::DataManager *clone() const final { return new StokesIStMan(*this); }
63 const casacore::Record &spec) {
64 return new StokesIStMan(name, spec);
65 }
66
67 casacore::String dataManagerType() const final { return "StokesIStMan"; }
68
70
71 casacore::Bool canAddRow() const final { return true; }
72
73 casacore::Bool canRemoveRow() const final { return true; }
74
75 casacore::Bool canAddColumn() const final { return true; }
76
77 casacore::Bool canRemoveColumn() const final { return true; }
78
82 static void registerClass();
83
84 protected:
85 private:
86 friend class StokesIStManColumn;
87
89
91 [[maybe_unused]] casacore::Bool doFsync) final {
92 return false;
93 }
94
95 // Let the storage manager create files as needed for a new table.
96 // This allows a column with an indirect array to create its file.
97 void create64(casacore::rownr_t nRow) final;
98
99 // Open the storage manager file for an existing table.
100 // Return the number of rows in the data file.
102
103 // Create a column in the storage manager on behalf of a table column.
104 // The caller will NOT delete the newly created object.
105 // Create a scalar column.
107 const casacore::String &name, int dataType,
108 const casacore::String &dataTypeID) final;
109
110 // Create a direct array column.
112 const casacore::String &name, int dataType,
113 const casacore::String &dataTypeID) final;
114
115 // Create an indirect array column.
117 const casacore::String &name, int dataType,
118 const casacore::String &dataTypeID) final;
119
121
122 void deleteManager() final;
123
124 // Prepare the columns, let the data manager initialize itself further.
125 // Prepare is called after create/open has been called for all
126 // columns. In this way one can be sure that referenced columns
127 // are read back and partly initialized.
128 void prepare() final;
129
130 // Reopen the storage manager files for read/write.
131 void reopenRW() final;
132
133 // Add rows to the storage manager.
134 void addRow64(casacore::rownr_t nrrow) final;
135
136 // Delete a row from all columns.
137 void removeRow64(casacore::rownr_t row_nr) final;
138
139 // Do the final addition of a column.
141
142 // Remove a column from the data file.
144
145 std::string name_;
146 // The item-type needs to be a pointer, because casacore::StManColumn
147 // does not have move construct/assignment.
148 std::vector<std::unique_ptr<StokesIStManColumn>> columns_;
150 constexpr static size_t kHeaderSize = 8;
151 constexpr static const char kMagicHeaderTag[8] = "StkIcol";
152};
153
154} // namespace casacore
155
156#endif
void register_stokesistman()
Abstract base class for a data manager.
Base class for columns of the StokesIStMan.
The Stokes I storage manager behaves like a full set of (4) polarizations but only stores the Stokes ...
casacore::DataManagerColumn * makeDirArrColumn(const casacore::String &name, int dataType, const casacore::String &dataTypeID) final
Create a direct array column.
casacore::Bool flush(casacore::AipsIO &, casacore::Bool doFsync) final
Flush and optionally fsync the data.
casacore::DataManagerColumn * makeIndArrColumn(const casacore::String &name, int dataType, const casacore::String &dataTypeID) final
Create an indirect array column.
StokesIStMan(const StokesIStMan &source)
Copy constructor that initializes a storage manager with similar specs.
static constexpr size_t kHeaderSize
casacore::DataManager * clone() const final
Make a clone of the derived object.
casacore::rownr_t resync64(casacore::rownr_t nRow) final
Resync the data by rereading cached data from the file.
void reopenRW() final
Reopen the storage manager files for read/write.
StokesIStMan(const casacore::String &name, const casacore::Record &spec)
This constructor is called by Casacore when it needs to create a StokesIStMan.
casacore::String dataManagerType() const final
Return the type name of the data manager (in fact its class name).
void prepare() final
Prepare the columns, let the data manager initialize itself further.
static constexpr const char kMagicHeaderTag[8]
casacore::Record dataManagerSpec() const final
Return a record containing data manager specifications.
void removeRow64(casacore::rownr_t row_nr) final
Delete a row from all columns.
casacore::DataManagerColumn * makeScalarColumn(const casacore::String &name, int dataType, const casacore::String &dataTypeID) final
Create a column in the storage manager on behalf of a table column.
casacore::Bool canRemoveColumn() const final
Does the data manager allow to delete columns? (default no)
void create64(casacore::rownr_t nRow) final
Let the storage manager create files as needed for a new table.
static casacore::DataManager * makeObject(const casacore::String &name, const casacore::Record &spec)
Create an object with given name and spec.
void addRow64(casacore::rownr_t nrrow) final
Add rows to the storage manager.
casacore::Bool canRemoveRow() const final
Does the data manager allow to delete rows? (default no)
static void registerClass()
This function makes the StokesIStMan known to Casacore.
void deleteManager() final
The data manager will be deleted (because all its columns are requested to be deleted).
casacore::Bool canAddRow() const final
Does the data manager allow to add rows? (default no)
void removeColumn(casacore::DataManagerColumn *) final
Remove a column from the data file.
BufferedColumnarFile file_
uint64_t CalculateAndUpdateStride()
void addColumn(casacore::DataManagerColumn *) final
Do the final addition of a column.
casacore::rownr_t open64(casacore::rownr_t nRow, casacore::AipsIO &) final
Open the storage manager file for an existing table.
casacore::Bool canAddColumn() const final
Does the data manager allow to add columns? (default no)
std::vector< std::unique_ptr< StokesIStManColumn > > columns_
The item-type needs to be a pointer, because casacore::StManColumn does not have move construct/assig...
String: the storage and methods of handling collections of characters.
Definition String.h:223
this file contains all the compiler specific defines
Definition mainpage.dox:28
bool Bool
Define the standard types used by Casacore.
Definition aipstype.h:40
uInt64 rownr_t
Define the type of a row number in a table.
Definition aipsxtype.h:44
Define real & complex conjugation for non-complex types and put comparisons into std namespace.
Definition Complex.h:350