00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 #ifndef TABLES_TABLECOLUMN_H
00029 #define TABLES_TABLECOLUMN_H
00030
00031
00032
00033 #include <casacore/casa/aips.h>
00034 #include <casacore/tables/Tables/BaseColumn.h>
00035 #include <casacore/tables/Tables/BaseTable.h>
00036 #include <casacore/casa/BasicSL/String.h>
00037 #include <casacore/casa/Arrays/IPosition.h>
00038
00039 namespace casacore {
00040
00041
00042 class Table;
00043 class BaseTable;
00044
00045
00046
00047 #if defined(AIPS_DEBUG)
00048 # define TABLECOLUMNCHECKROW(ROWNR) \
00049 (checkRowNumber (ROWNR))
00050 #else
00051 # define TABLECOLUMNCHECKROW(ROWNR)
00052 #endif
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098 class TableColumn
00099 {
00100 friend class ForwardColumn;
00101
00102 public:
00103
00104
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114 TableColumn();
00115
00116
00117 TableColumn (const Table&, const String& columnName);
00118
00119
00120
00121
00122
00123
00124
00125
00126 TableColumn (const Table&, uInt columnIndex);
00127
00128
00129 TableColumn (const TableColumn&);
00130
00131 virtual ~TableColumn();
00132
00133
00134
00135
00136
00137 TableColumn& operator= (const TableColumn&);
00138
00139
00140 virtual TableColumn* clone() const;
00141
00142
00143
00144
00145
00146
00147 void reference (const TableColumn&);
00148
00149
00150
00151
00152
00153 void attach (const Table& table, const String& columnName)
00154 { reference (TableColumn (table, columnName)); }
00155 void attach (const Table& table, uInt columnIndex)
00156 { reference (TableColumn (table, columnIndex)); }
00157
00158
00159
00160 Bool isNull() const
00161 { return (baseColPtr_p == 0 ? True : False); }
00162
00163
00164
00165 void throwIfNull() const;
00166
00167
00168
00169 Bool isWritable() const
00170 { return baseTabPtr_p->isWritable() && isColWritable_p; }
00171
00172
00173
00174 Bool isWritableAtAll() const
00175 { return isColWritable_p; }
00176
00177
00178 void checkWritable() const
00179 { if (!isWritable()) throwNotWritable(); }
00180
00181
00182 const TableRecord& keywordSet() const
00183 { return baseColPtr_p->keywordSet(); }
00184
00185
00186
00187 TableRecord& rwKeywordSet();
00188
00189
00190
00191 const ColumnDesc& columnDesc() const;
00192
00193
00194 Table table() const;
00195
00196
00197 uInt nrow() const
00198 { return baseColPtr_p->nrow(); }
00199
00200
00201
00202
00203 Bool canChangeShape() const
00204 { return canChangeShape_p; }
00205
00206
00207
00208
00209 uInt ndimColumn() const
00210 { return baseColPtr_p->ndimColumn(); }
00211
00212
00213
00214
00215 IPosition shapeColumn() const
00216 { return baseColPtr_p->shapeColumn(); }
00217
00218
00219 Bool isDefined (uInt rownr) const
00220 { TABLECOLUMNCHECKROW(rownr); return baseColPtr_p->isDefined (rownr); }
00221
00222
00223
00224 Bool hasContent (uInt rownr=0) const;
00225
00226
00227 uInt ndim (uInt rownr) const
00228 { TABLECOLUMNCHECKROW(rownr); return baseColPtr_p->ndim (rownr); }
00229
00230
00231 IPosition shape (uInt rownr) const
00232 { TABLECOLUMNCHECKROW(rownr); return baseColPtr_p->shape (rownr); }
00233
00234
00235 IPosition tileShape (uInt rownr) const
00236 { TABLECOLUMNCHECKROW(rownr); return baseColPtr_p->tileShape (rownr); }
00237
00238
00239
00240
00241
00242 void getScalar (uInt rownr, Bool& value) const
00243 { TABLECOLUMNCHECKROW(rownr); baseColPtr_p->getScalar (rownr, value); }
00244 void getScalar (uInt rownr, uChar& value) const
00245 { TABLECOLUMNCHECKROW(rownr); baseColPtr_p->getScalar (rownr, value); }
00246 void getScalar (uInt rownr, Short& value) const
00247 { TABLECOLUMNCHECKROW(rownr); baseColPtr_p->getScalar (rownr, value); }
00248 void getScalar (uInt rownr, uShort& value) const
00249 { TABLECOLUMNCHECKROW(rownr); baseColPtr_p->getScalar (rownr, value); }
00250 void getScalar (uInt rownr, Int& value) const
00251 { TABLECOLUMNCHECKROW(rownr); baseColPtr_p->getScalar (rownr, value); }
00252 void getScalar (uInt rownr, uInt& value) const
00253 { TABLECOLUMNCHECKROW(rownr); baseColPtr_p->getScalar (rownr, value); }
00254 void getScalar (uInt rownr, Int64& value) const
00255 { TABLECOLUMNCHECKROW(rownr); baseColPtr_p->getScalar (rownr, value); }
00256 void getScalar (uInt rownr, float& value) const
00257 { TABLECOLUMNCHECKROW(rownr); baseColPtr_p->getScalar (rownr, value); }
00258 void getScalar (uInt rownr, double& value) const
00259 { TABLECOLUMNCHECKROW(rownr); baseColPtr_p->getScalar (rownr, value); }
00260 void getScalar (uInt rownr, Complex& value) const
00261 { TABLECOLUMNCHECKROW(rownr); baseColPtr_p->getScalar (rownr, value); }
00262 void getScalar (uInt rownr, DComplex& value) const
00263 { TABLECOLUMNCHECKROW(rownr); baseColPtr_p->getScalar (rownr, value); }
00264 void getScalar (uInt rownr, String& value) const
00265 { TABLECOLUMNCHECKROW(rownr); baseColPtr_p->getScalar (rownr, value); }
00266
00267
00268
00269
00270
00271 Bool asBool (uInt rownr) const;
00272 uChar asuChar (uInt rownr) const;
00273 Short asShort (uInt rownr) const;
00274 uShort asuShort (uInt rownr) const;
00275 Int asInt (uInt rownr) const;
00276 uInt asuInt (uInt rownr) const;
00277 float asfloat (uInt rownr) const;
00278 double asdouble (uInt rownr) const;
00279 Complex asComplex (uInt rownr) const;
00280 DComplex asDComplex (uInt rownr) const;
00281 String asString (uInt rownr) const;
00282
00283
00284
00285
00286
00287
00288
00289 void getScalarValue (uInt rownr, Bool* value, const String&) const
00290 { TABLECOLUMNCHECKROW(rownr); baseColPtr_p->getScalar (rownr,*value); }
00291 void getScalarValue (uInt rownr, uChar* value, const String&) const
00292 { TABLECOLUMNCHECKROW(rownr); baseColPtr_p->getScalar (rownr,*value); }
00293 void getScalarValue (uInt rownr, Short* value, const String&) const
00294 { TABLECOLUMNCHECKROW(rownr); baseColPtr_p->getScalar (rownr,*value); }
00295 void getScalarValue (uInt rownr, uShort* value, const String&) const
00296 { TABLECOLUMNCHECKROW(rownr); baseColPtr_p->getScalar (rownr,*value); }
00297 void getScalarValue (uInt rownr, Int* value, const String&) const
00298 { TABLECOLUMNCHECKROW(rownr); baseColPtr_p->getScalar (rownr,*value); }
00299 void getScalarValue (uInt rownr, uInt* value, const String&) const
00300 { TABLECOLUMNCHECKROW(rownr); baseColPtr_p->getScalar (rownr,*value); }
00301 void getScalarValue (uInt rownr, float* value, const String&) const
00302 { TABLECOLUMNCHECKROW(rownr); baseColPtr_p->getScalar (rownr,*value); }
00303 void getScalarValue (uInt rownr, double* value, const String&) const
00304 { TABLECOLUMNCHECKROW(rownr); baseColPtr_p->getScalar (rownr,*value); }
00305 void getScalarValue (uInt rownr, Complex* value, const String&) const
00306 { TABLECOLUMNCHECKROW(rownr); baseColPtr_p->getScalar (rownr,*value); }
00307 void getScalarValue (uInt rownr, DComplex* value, const String&) const
00308 { TABLECOLUMNCHECKROW(rownr); baseColPtr_p->getScalar (rownr,*value); }
00309 void getScalarValue (uInt rownr, String* value, const String&) const
00310 { TABLECOLUMNCHECKROW(rownr); baseColPtr_p->getScalar (rownr,*value); }
00311 void getScalarValue (uInt rownr, void* value,
00312 const String& dataTypeId) const
00313 { TABLECOLUMNCHECKROW(rownr);
00314 baseColPtr_p->getScalar (rownr,value,dataTypeId); }
00315
00316
00317
00318
00319
00320
00321
00322
00323
00324 void put (uInt rownr, const TableColumn& that,
00325 Bool preserveTileShape=False)
00326 { put (rownr, that, rownr, preserveTileShape); }
00327
00328
00329 virtual void put (uInt thisRownr, const TableColumn& that,
00330 uInt thatRownr, Bool preserveTileShape=False);
00331
00332
00333
00334
00335
00336
00337
00338
00339
00340 void putColumn (const TableColumn& that);
00341
00342
00343
00344
00345
00346 void putScalar (uInt rownr, const Bool& value)
00347 { TABLECOLUMNCHECKROW(rownr); baseColPtr_p->putScalar (rownr, value); }
00348 void putScalar (uInt rownr, const uChar& value)
00349 { TABLECOLUMNCHECKROW(rownr); baseColPtr_p->putScalar (rownr, value); }
00350 void putScalar (uInt rownr, const Short& value)
00351 { TABLECOLUMNCHECKROW(rownr); baseColPtr_p->putScalar (rownr, value); }
00352 void putScalar (uInt rownr, const uShort& value)
00353 { TABLECOLUMNCHECKROW(rownr); baseColPtr_p->putScalar (rownr, value); }
00354 void putScalar (uInt rownr, const Int& value)
00355 { TABLECOLUMNCHECKROW(rownr); baseColPtr_p->putScalar (rownr, value); }
00356 void putScalar (uInt rownr, const uInt& value)
00357 { TABLECOLUMNCHECKROW(rownr); baseColPtr_p->putScalar (rownr, value); }
00358 void putScalar (uInt rownr, const float& value)
00359 { TABLECOLUMNCHECKROW(rownr); baseColPtr_p->putScalar (rownr, value); }
00360 void putScalar (uInt rownr, const double& value)
00361 { TABLECOLUMNCHECKROW(rownr); baseColPtr_p->putScalar (rownr, value); }
00362 void putScalar (uInt rownr, const Complex& value)
00363 { TABLECOLUMNCHECKROW(rownr); baseColPtr_p->putScalar (rownr, value); }
00364 void putScalar (uInt rownr, const DComplex& value)
00365 { TABLECOLUMNCHECKROW(rownr); baseColPtr_p->putScalar (rownr, value); }
00366 void putScalar (uInt rownr, const String& value)
00367 { TABLECOLUMNCHECKROW(rownr); baseColPtr_p->putScalar (rownr, value); }
00368 void putScalar (uInt rownr, const Char* value)
00369 { putScalar (rownr, String(value)); }
00370
00371
00372
00373
00374 void checkRowNumber (uInt rownr) const
00375 { baseTabPtr_p->checkRowNumber (rownr); }
00376
00377
00378 void setMaximumCacheSize (uInt nbytes) const
00379 { baseColPtr_p->setMaximumCacheSize (nbytes); }
00380
00381 protected:
00382 BaseTable* baseTabPtr_p;
00383 BaseColumn* baseColPtr_p;
00384 const ColumnCache* colCachePtr_p;
00385 Bool canChangeShape_p;
00386 Bool isColWritable_p;
00387
00388
00389
00390 BaseColumn* baseColPtr () const
00391 { return baseColPtr_p; }
00392
00393
00394
00395
00396
00397 BaseColumn* baseColPtr (const TableColumn& that) const
00398 { return that.baseColPtr_p; }
00399
00400 private:
00401
00402 void throwNotWritable() const;
00403 };
00404
00405
00406
00407 typedef TableColumn ROTableColumn;
00408
00409
00410 }
00411
00412 #endif