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_TSMDATACOLUMN_H
00029 #define TABLES_TSMDATACOLUMN_H
00030
00031
00032
00033 #include <casacore/casa/aips.h>
00034 #include <casacore/tables/DataMan/TSMColumn.h>
00035 #include <casacore/tables/DataMan/TSMCube.h>
00036 #include <casacore/casa/BasicSL/Complex.h>
00037 #include <casacore/casa/Arrays/IPosition.h>
00038 #include <casacore/casa/BasicSL/String.h>
00039 #include <casacore/casa/OS/Conversion.h>
00040
00041 namespace casacore {
00042
00043
00044 class Slicer;
00045
00046
00047
00048
00049
00050
00051
00052
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 class TSMDataColumn : public TSMColumn
00097 {
00098 public:
00099
00100
00101 TSMDataColumn (const TSMColumn& column);
00102
00103
00104 virtual ~TSMDataColumn();
00105
00106
00107 uInt tilePixelSize() const;
00108
00109
00110 uInt localPixelSize() const;
00111
00112
00113 uInt dataLength (uInt nrPixels) const;
00114
00115
00116 void setColumnNumber (uInt colnr);
00117
00118
00119 Bool canAccessScalarColumn (Bool& reask) const;
00120
00121
00122 Bool canAccessArrayColumn (Bool& reask) const;
00123
00124
00125 Bool canAccessSlice (Bool& reask) const;
00126
00127
00128 Bool canAccessColumnSlice (Bool& reask) const;
00129
00130
00131
00132 Bool canChangeShape() const;
00133
00134
00135
00136
00137 void setShape (uInt rownr, const IPosition& shape);
00138
00139
00140
00141
00142
00143
00144 void setShapeTiled (uInt rownr, const IPosition& shape,
00145 const IPosition& tileShape);
00146
00147
00148 Bool isShapeDefined (uInt rownr);
00149
00150
00151 IPosition shape (uInt rownr);
00152
00153
00154 IPosition tileShape (uInt rownr);
00155
00156
00157
00158
00159
00160 void getBoolV (uInt rownr, Bool* dataPtr);
00161 void getuCharV (uInt rownr, uChar* dataPtr);
00162 void getShortV (uInt rownr, Short* dataPtr);
00163 void getuShortV (uInt rownr, uShort* dataPtr);
00164 void getIntV (uInt rownr, Int* dataPtr);
00165 void getuIntV (uInt rownr, uInt* dataPtr);
00166 void getfloatV (uInt rownr, float* dataPtr);
00167 void getdoubleV (uInt rownr, double* dataPtr);
00168 void getComplexV (uInt rownr, Complex* dataPtr);
00169 void getDComplexV (uInt rownr, DComplex* dataPtr);
00170
00171
00172
00173
00174
00175
00176 void putBoolV (uInt rownr, const Bool* dataPtr);
00177 void putuCharV (uInt rownr, const uChar* dataPtr);
00178 void putShortV (uInt rownr, const Short* dataPtr);
00179 void putuShortV (uInt rownr, const uShort* dataPtr);
00180 void putIntV (uInt rownr, const Int* dataPtr);
00181 void putuIntV (uInt rownr, const uInt* dataPtr);
00182 void putfloatV (uInt rownr, const float* dataPtr);
00183 void putdoubleV (uInt rownr, const double* dataPtr);
00184 void putComplexV (uInt rownr, const Complex* dataPtr);
00185 void putDComplexV (uInt rownr, const DComplex* dataPtr);
00186
00187
00188
00189
00190
00191
00192
00193 void getArrayBoolV (uInt rownr, Array<Bool>* dataPtr);
00194 void getArrayuCharV (uInt rownr, Array<uChar>* dataPtr);
00195 void getArrayShortV (uInt rownr, Array<Short>* dataPtr);
00196 void getArrayuShortV (uInt rownr, Array<uShort>* dataPtr);
00197 void getArrayIntV (uInt rownr, Array<Int>* dataPtr);
00198 void getArrayuIntV (uInt rownr, Array<uInt>* dataPtr);
00199 void getArrayfloatV (uInt rownr, Array<float>* dataPtr);
00200 void getArraydoubleV (uInt rownr, Array<double>* dataPtr);
00201 void getArrayComplexV (uInt rownr, Array<Complex>* dataPtr);
00202 void getArrayDComplexV (uInt rownr, Array<DComplex>* dataPtr);
00203
00204
00205
00206
00207
00208
00209
00210 void putArrayBoolV (uInt rownr, const Array<Bool>* dataPtr);
00211 void putArrayuCharV (uInt rownr, const Array<uChar>* dataPtr);
00212 void putArrayShortV (uInt rownr, const Array<Short>* dataPtr);
00213 void putArrayuShortV (uInt rownr, const Array<uShort>* dataPtr);
00214 void putArrayIntV (uInt rownr, const Array<Int>* dataPtr);
00215 void putArrayuIntV (uInt rownr, const Array<uInt>* dataPtr);
00216 void putArrayfloatV (uInt rownr, const Array<float>* dataPtr);
00217 void putArraydoubleV (uInt rownr, const Array<double>* dataPtr);
00218 void putArrayComplexV (uInt rownr, const Array<Complex>* dataPtr);
00219 void putArrayDComplexV (uInt rownr, const Array<DComplex>* dataPtr);
00220
00221
00222 void getSliceBoolV (uInt rownr, const Slicer& slicer,
00223 Array<Bool>* dataPtr);
00224 void getSliceuCharV (uInt rownr, const Slicer& slicer,
00225 Array<uChar>* dataPtr);
00226 void getSliceShortV (uInt rownr, const Slicer& slicer,
00227 Array<Short>* dataPtr);
00228 void getSliceuShortV (uInt rownr, const Slicer& slicer,
00229 Array<uShort>* dataPtr);
00230 void getSliceIntV (uInt rownr, const Slicer& slicer,
00231 Array<Int>* dataPtr);
00232 void getSliceuIntV (uInt rownr, const Slicer& slicer,
00233 Array<uInt>* dataPtr);
00234 void getSlicefloatV (uInt rownr, const Slicer& slicer,
00235 Array<float>* dataPtr);
00236 void getSlicedoubleV (uInt rownr, const Slicer& slicer,
00237 Array<double>* dataPtr);
00238 void getSliceComplexV (uInt rownr, const Slicer& slicer,
00239 Array<Complex>* dataPtr);
00240 void getSliceDComplexV (uInt rownr, const Slicer& slicer,
00241 Array<DComplex>* dataPtr);
00242
00243 void putSliceBoolV (uInt rownr, const Slicer& slicer,
00244 const Array<Bool>* dataPtr);
00245 void putSliceuCharV (uInt rownr, const Slicer& slicer,
00246 const Array<uChar>* dataPtr);
00247 void putSliceShortV (uInt rownr, const Slicer& slicer,
00248 const Array<Short>* dataPtr);
00249 void putSliceuShortV (uInt rownr, const Slicer& slicer,
00250 const Array<uShort>* dataPtr);
00251 void putSliceIntV (uInt rownr, const Slicer& slicer,
00252 const Array<Int>* dataPtr);
00253 void putSliceuIntV (uInt rownr, const Slicer& slicer,
00254 const Array<uInt>* dataPtr);
00255 void putSlicefloatV (uInt rownr, const Slicer& slicer,
00256 const Array<float>* dataPtr);
00257 void putSlicedoubleV (uInt rownr, const Slicer& slicer,
00258 const Array<double>* dataPtr);
00259 void putSliceComplexV (uInt rownr, const Slicer& slicer,
00260 const Array<Complex>* dataPtr);
00261 void putSliceDComplexV (uInt rownr, const Slicer& slicer,
00262 const Array<DComplex>* dataPtr);
00263
00264 void getScalarColumnBoolV (Vector<Bool>* arr);
00265 void getScalarColumnuCharV (Vector<uChar>* arr);
00266 void getScalarColumnShortV (Vector<Short>* arr);
00267 void getScalarColumnuShortV (Vector<uShort>* arr);
00268 void getScalarColumnIntV (Vector<Int>* arr);
00269 void getScalarColumnuIntV (Vector<uInt>* arr);
00270 void getScalarColumnfloatV (Vector<float>* arr);
00271 void getScalarColumndoubleV (Vector<double>* arr);
00272 void getScalarColumnComplexV (Vector<Complex>* arr);
00273 void getScalarColumnDComplexV (Vector<DComplex>* arr);
00274
00275 void putScalarColumnBoolV (const Vector<Bool>* arr);
00276 void putScalarColumnuCharV (const Vector<uChar>* arr);
00277 void putScalarColumnShortV (const Vector<Short>* arr);
00278 void putScalarColumnuShortV (const Vector<uShort>* arr);
00279 void putScalarColumnIntV (const Vector<Int>* arr);
00280 void putScalarColumnuIntV (const Vector<uInt>* arr);
00281 void putScalarColumnfloatV (const Vector<float>* arr);
00282 void putScalarColumndoubleV (const Vector<double>* arr);
00283 void putScalarColumnComplexV (const Vector<Complex>* arr);
00284 void putScalarColumnDComplexV (const Vector<DComplex>* arr);
00285
00286
00287
00288
00289
00290
00291 virtual void getScalarColumnCellsBoolV (const RefRows& rownrs,
00292 Vector<Bool>* dataPtr);
00293 virtual void getScalarColumnCellsuCharV (const RefRows& rownrs,
00294 Vector<uChar>* dataPtr);
00295 virtual void getScalarColumnCellsShortV (const RefRows& rownrs,
00296 Vector<Short>* dataPtr);
00297 virtual void getScalarColumnCellsuShortV (const RefRows& rownrs,
00298 Vector<uShort>* dataPtr);
00299 virtual void getScalarColumnCellsIntV (const RefRows& rownrs,
00300 Vector<Int>* dataPtr);
00301 virtual void getScalarColumnCellsuIntV (const RefRows& rownrs,
00302 Vector<uInt>* dataPtr);
00303 virtual void getScalarColumnCellsfloatV (const RefRows& rownrs,
00304 Vector<float>* dataPtr);
00305 virtual void getScalarColumnCellsdoubleV (const RefRows& rownrs,
00306 Vector<double>* dataPtr);
00307 virtual void getScalarColumnCellsComplexV (const RefRows& rownrs,
00308 Vector<Complex>* dataPtr);
00309 virtual void getScalarColumnCellsDComplexV (const RefRows& rownrs,
00310 Vector<DComplex>* dataPtr);
00311
00312
00313
00314
00315
00316
00317
00318 virtual void putScalarColumnCellsBoolV (const RefRows& rownrs,
00319 const Vector<Bool>* dataPtr);
00320 virtual void putScalarColumnCellsuCharV (const RefRows& rownrs,
00321 const Vector<uChar>* dataPtr);
00322 virtual void putScalarColumnCellsShortV (const RefRows& rownrs,
00323 const Vector<Short>* dataPtr);
00324 virtual void putScalarColumnCellsuShortV (const RefRows& rownrs,
00325 const Vector<uShort>* dataPtr);
00326 virtual void putScalarColumnCellsIntV (const RefRows& rownrs,
00327 const Vector<Int>* dataPtr);
00328 virtual void putScalarColumnCellsuIntV (const RefRows& rownrs,
00329 const Vector<uInt>* dataPtr);
00330 virtual void putScalarColumnCellsfloatV (const RefRows& rownrs,
00331 const Vector<float>* dataPtr);
00332 virtual void putScalarColumnCellsdoubleV (const RefRows& rownrs,
00333 const Vector<double>* dataPtr);
00334 virtual void putScalarColumnCellsComplexV (const RefRows& rownrs,
00335 const Vector<Complex>* dataPtr);
00336 virtual void putScalarColumnCellsDComplexV (const RefRows& rownrs,
00337 const Vector<DComplex>* dataPtr);
00338
00339
00340 void getArrayColumnBoolV (Array<Bool>* arr);
00341 void getArrayColumnuCharV (Array<uChar>* arr);
00342 void getArrayColumnShortV (Array<Short>* arr);
00343 void getArrayColumnuShortV (Array<uShort>* arr);
00344 void getArrayColumnIntV (Array<Int>* arr);
00345 void getArrayColumnuIntV (Array<uInt>* arr);
00346 void getArrayColumnfloatV (Array<float>* arr);
00347 void getArrayColumndoubleV (Array<double>* arr);
00348 void getArrayColumnComplexV (Array<Complex>* arr);
00349 void getArrayColumnDComplexV (Array<DComplex>* arr);
00350
00351 void putArrayColumnBoolV (const Array<Bool>* arr);
00352 void putArrayColumnuCharV (const Array<uChar>* arr);
00353 void putArrayColumnShortV (const Array<Short>* arr);
00354 void putArrayColumnuShortV (const Array<uShort>* arr);
00355 void putArrayColumnIntV (const Array<Int>* arr);
00356 void putArrayColumnuIntV (const Array<uInt>* arr);
00357 void putArrayColumnfloatV (const Array<float>* arr);
00358 void putArrayColumndoubleV (const Array<double>* arr);
00359 void putArrayColumnComplexV (const Array<Complex>* arr);
00360 void putArrayColumnDComplexV (const Array<DComplex>* arr);
00361
00362
00363
00364
00365
00366
00367 virtual void getArrayColumnCellsBoolV (const RefRows& rownrs,
00368 Array<Bool>* dataPtr);
00369 virtual void getArrayColumnCellsuCharV (const RefRows& rownrs,
00370 Array<uChar>* dataPtr);
00371 virtual void getArrayColumnCellsShortV (const RefRows& rownrs,
00372 Array<Short>* dataPtr);
00373 virtual void getArrayColumnCellsuShortV (const RefRows& rownrs,
00374 Array<uShort>* dataPtr);
00375 virtual void getArrayColumnCellsIntV (const RefRows& rownrs,
00376 Array<Int>* dataPtr);
00377 virtual void getArrayColumnCellsuIntV (const RefRows& rownrs,
00378 Array<uInt>* dataPtr);
00379 virtual void getArrayColumnCellsfloatV (const RefRows& rownrs,
00380 Array<float>* dataPtr);
00381 virtual void getArrayColumnCellsdoubleV (const RefRows& rownrs,
00382 Array<double>* dataPtr);
00383 virtual void getArrayColumnCellsComplexV (const RefRows& rownrs,
00384 Array<Complex>* dataPtr);
00385 virtual void getArrayColumnCellsDComplexV (const RefRows& rownrs,
00386 Array<DComplex>* dataPtr);
00387
00388
00389
00390
00391
00392
00393
00394 virtual void putArrayColumnCellsBoolV (const RefRows& rownrs,
00395 const Array<Bool>* dataPtr);
00396 virtual void putArrayColumnCellsuCharV (const RefRows& rownrs,
00397 const Array<uChar>* dataPtr);
00398 virtual void putArrayColumnCellsShortV (const RefRows& rownrs,
00399 const Array<Short>* dataPtr);
00400 virtual void putArrayColumnCellsuShortV (const RefRows& rownrs,
00401 const Array<uShort>* dataPtr);
00402 virtual void putArrayColumnCellsIntV (const RefRows& rownrs,
00403 const Array<Int>* dataPtr);
00404 virtual void putArrayColumnCellsuIntV (const RefRows& rownrs,
00405 const Array<uInt>* dataPtr);
00406 virtual void putArrayColumnCellsfloatV (const RefRows& rownrs,
00407 const Array<float>* dataPtr);
00408 virtual void putArrayColumnCellsdoubleV (const RefRows& rownrs,
00409 const Array<double>* dataPtr);
00410 virtual void putArrayColumnCellsComplexV (const RefRows& rownrs,
00411 const Array<Complex>* dataPtr);
00412 virtual void putArrayColumnCellsDComplexV (const RefRows& rownrs,
00413 const Array<DComplex>* dataPtr);
00414
00415
00416 void getColumnSliceBoolV (const Slicer& slicer, Array<Bool>* arr);
00417 void getColumnSliceuCharV (const Slicer& slicer, Array<uChar>* arr);
00418 void getColumnSliceShortV (const Slicer& slicer, Array<Short>* arr);
00419 void getColumnSliceuShortV (const Slicer& slicer, Array<uShort>* arr);
00420 void getColumnSliceIntV (const Slicer& slicer, Array<Int>* arr);
00421 void getColumnSliceuIntV (const Slicer& slicer, Array<uInt>* arr);
00422 void getColumnSlicefloatV (const Slicer& slicer, Array<float>* arr);
00423 void getColumnSlicedoubleV (const Slicer& slicer, Array<double>* arr);
00424 void getColumnSliceComplexV (const Slicer& slicer, Array<Complex>* arr);
00425 void getColumnSliceDComplexV (const Slicer& slicer, Array<DComplex>* arr);
00426
00427 void putColumnSliceBoolV (const Slicer& slicer,
00428 const Array<Bool>* dataPtr);
00429 void putColumnSliceuCharV (const Slicer& slicer,
00430 const Array<uChar>* dataPtr);
00431 void putColumnSliceShortV (const Slicer& slicer,
00432 const Array<Short>* dataPtr);
00433 void putColumnSliceuShortV (const Slicer& slicer,
00434 const Array<uShort>* dataPtr);
00435 void putColumnSliceIntV (const Slicer& slicer,
00436 const Array<Int>* dataPtr);
00437 void putColumnSliceuIntV (const Slicer& slicer,
00438 const Array<uInt>* dataPtr);
00439 void putColumnSlicefloatV (const Slicer& slicer,
00440 const Array<float>* dataPtr);
00441 void putColumnSlicedoubleV (const Slicer& slicer,
00442 const Array<double>* dataPtr);
00443 void putColumnSliceComplexV (const Slicer& slicer,
00444 const Array<Complex>* dataPtr);
00445 void putColumnSliceDComplexV (const Slicer& slicer,
00446 const Array<DComplex>* dataPtr);
00447
00448
00449
00450
00451
00452
00453 virtual void getColumnSliceCellsBoolV (const RefRows& rownrs,
00454 const Slicer& ns,
00455 Array<Bool>* dataPtr);
00456 virtual void getColumnSliceCellsuCharV (const RefRows& rownrs,
00457 const Slicer& ns,
00458 Array<uChar>* dataPtr);
00459 virtual void getColumnSliceCellsShortV (const RefRows& rownrs,
00460 const Slicer& ns,
00461 Array<Short>* dataPtr);
00462 virtual void getColumnSliceCellsuShortV (const RefRows& rownrs,
00463 const Slicer& ns,
00464 Array<uShort>* dataPtr);
00465 virtual void getColumnSliceCellsIntV (const RefRows& rownrs,
00466 const Slicer& ns,
00467 Array<Int>* dataPtr);
00468 virtual void getColumnSliceCellsuIntV (const RefRows& rownrs,
00469 const Slicer& ns,
00470 Array<uInt>* dataPtr);
00471 virtual void getColumnSliceCellsfloatV (const RefRows& rownrs,
00472 const Slicer& ns,
00473 Array<float>* dataPtr);
00474 virtual void getColumnSliceCellsdoubleV (const RefRows& rownrs,
00475 const Slicer& ns,
00476 Array<double>* dataPtr);
00477 virtual void getColumnSliceCellsComplexV (const RefRows& rownrs,
00478 const Slicer& ns,
00479 Array<Complex>* dataPtr);
00480 virtual void getColumnSliceCellsDComplexV (const RefRows& rownrs,
00481 const Slicer& ns,
00482 Array<DComplex>* dataPtr);
00483
00484
00485
00486
00487
00488
00489
00490 virtual void putColumnSliceCellsBoolV (const RefRows& rownrs,
00491 const Slicer& ns,
00492 const Array<Bool>* dataPtr);
00493 virtual void putColumnSliceCellsuCharV (const RefRows& rownrs,
00494 const Slicer& ns,
00495 const Array<uChar>* dataPtr);
00496 virtual void putColumnSliceCellsShortV (const RefRows& rownrs,
00497 const Slicer& ns,
00498 const Array<Short>* dataPtr);
00499 virtual void putColumnSliceCellsuShortV (const RefRows& rownrs,
00500 const Slicer& ns,
00501 const Array<uShort>* dataPtr);
00502 virtual void putColumnSliceCellsIntV (const RefRows& rownrs,
00503 const Slicer& ns,
00504 const Array<Int>* dataPtr);
00505 virtual void putColumnSliceCellsuIntV (const RefRows& rownrs,
00506 const Slicer& ns,
00507 const Array<uInt>* dataPtr);
00508 virtual void putColumnSliceCellsfloatV (const RefRows& rownrs,
00509 const Slicer& ns,
00510 const Array<float>* dataPtr);
00511 virtual void putColumnSliceCellsdoubleV (const RefRows& rownrs,
00512 const Slicer& ns,
00513 const Array<double>* dataPtr);
00514 virtual void putColumnSliceCellsComplexV (const RefRows& rownrs,
00515 const Slicer& ns,
00516 const Array<Complex>* dataPtr);
00517 virtual void putColumnSliceCellsDComplexV (const RefRows& rownrs,
00518 const Slicer& ns,
00519 const Array<DComplex>* dataPtr);
00520
00521
00522
00523
00524 void readTile (void* to, const void* from, uInt nrPixels);
00525
00526
00527
00528 void writeTile (void* to, const void* from, uInt nrPixels);
00529
00530
00531
00532 Conversion::ValueFunction* getConvertFunction (Bool writeFlag) const
00533 { return writeFlag ? writeFunc_p : readFunc_p; }
00534
00535
00536 size_t getNrConvert() const
00537 { return convPixelSize_p; }
00538
00539
00540 Bool isConversionNeeded() const
00541 { return mustConvert_p; }
00542
00543 private:
00544
00545 uInt tilePixelSize_p;
00546
00547 uInt localPixelSize_p;
00548
00549
00550 uInt convPixelSize_p;
00551
00552 Bool mustConvert_p;
00553
00554 uInt colnr_p;
00555
00556 Conversion::ValueFunction* readFunc_p;
00557
00558 Conversion::ValueFunction* writeFunc_p;
00559
00560
00561
00562 TSMDataColumn (const TSMDataColumn&);
00563
00564
00565 TSMDataColumn& operator= (const TSMDataColumn&);
00566
00567
00568
00569
00570 void accessCell (uInt rownr,
00571 const void* dataPtr, Bool writeFlag);
00572
00573
00574 void accessCellSlice (uInt rownr, const Slicer& ns,
00575 const void* dataPtr, Bool writeFlag);
00576
00577
00578
00579 void accessColumn (const void* dataPtr, Bool writeFlag);
00580
00581
00582
00583 void accessColumnSlice (const Slicer& ns,
00584 const void* dataPtr, Bool writeFlag);
00585
00586
00587
00588 void accessColumnCells (const RefRows& rownrs, const IPosition& shape,
00589 const void* dataPtr, Bool writeFlag);
00590
00591
00592
00593 void accessColumnSliceCells (const RefRows& rownrs, const Slicer& ns,
00594 const IPosition& shape,
00595 const void* dataPtr, Bool writeFlag);
00596
00597
00598 void accessFullCells (TSMCube* hypercube,
00599 char* dataPtr, Bool writeFlag,
00600 const IPosition& start,
00601 const IPosition& end,
00602 const IPosition& incr);
00603
00604
00605 void accessSlicedCells (TSMCube* hypercube,
00606 char* dataPtr, Bool writeFlag,
00607 const IPosition& start,
00608 const IPosition& end,
00609 const IPosition& incr);
00610 };
00611
00612
00613 inline uInt TSMDataColumn::tilePixelSize() const
00614 {
00615 return tilePixelSize_p;
00616 }
00617 inline uInt TSMDataColumn::localPixelSize() const
00618 {
00619 return localPixelSize_p;
00620 }
00621 inline void TSMDataColumn::setColumnNumber (uInt colnr)
00622 {
00623 colnr_p = colnr;
00624 }
00625 inline void TSMDataColumn::readTile (void* to, const void* from,
00626 uInt nrPixels)
00627 {
00628 readFunc_p (to, from, nrPixels * convPixelSize_p);
00629 }
00630 inline void TSMDataColumn::writeTile (void* to, const void* from,
00631 uInt nrPixels)
00632 {
00633 writeFunc_p (to, from, nrPixels * convPixelSize_p);
00634 }
00635
00636
00637
00638 }
00639
00640 #endif