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_STINDARRAY_H
00029 #define TABLES_STINDARRAY_H
00030
00031
00032 #include <casacore/casa/aips.h>
00033 #include <casacore/tables/DataMan/StArrayFile.h>
00034 #include <casacore/casa/Arrays/IPosition.h>
00035 #include <casacore/casa/BasicSL/Complex.h>
00036
00037 namespace casacore {
00038
00039
00040 class Slicer;
00041 template<class T> class Array;
00042
00043
00044
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
00097
00098
00099
00100
00101
00102
00103
00104
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115
00116
00117
00118
00119
00120
00121
00122
00123
00124
00125
00126
00127
00128
00129
00130
00131
00132
00133
00134
00135
00136
00137
00138
00139
00140
00141 class StIndArray
00142 {
00143 public:
00144
00145
00146
00147 StIndArray (Int64 fileOffset);
00148
00149
00150 StIndArray (const StIndArray&);
00151
00152
00153 StIndArray& operator= (const StIndArray&);
00154
00155 ~StIndArray();
00156
00157
00158 const IPosition& shape() const
00159 {return shape_p;}
00160
00161
00162 Int64 fileOffset() const
00163 {return fileOffset_p;}
00164
00165
00166
00167
00168
00169
00170 Bool setShape (StManArrayFile&, int dataType, const IPosition& shape);
00171
00172
00173 void getShape (StManArrayFile& ios);
00174
00175
00176 uInt refCount (StManArrayFile& ios);
00177
00178
00179 void incrementRefCount (StManArrayFile& ios);
00180
00181
00182 void decrementRefCount (StManArrayFile& ios);
00183
00184
00185
00186 void copyData (StManArrayFile& ios, int dataType, const StIndArray& other);
00187
00188
00189
00190
00191
00192 void getArrayBoolV (StManArrayFile&, Array<Bool>* dataPtr);
00193 void getArrayuCharV (StManArrayFile&, Array<uChar>* dataPtr);
00194 void getArrayShortV (StManArrayFile&, Array<Short>* dataPtr);
00195 void getArrayuShortV (StManArrayFile&, Array<uShort>* dataPtr);
00196 void getArrayIntV (StManArrayFile&, Array<Int>* dataPtr);
00197 void getArrayuIntV (StManArrayFile&, Array<uInt>* dataPtr);
00198 void getArrayfloatV (StManArrayFile&, Array<float>* dataPtr);
00199 void getArraydoubleV (StManArrayFile&, Array<double>* dataPtr);
00200 void getArrayComplexV (StManArrayFile&, Array<Complex>* dataPtr);
00201 void getArrayDComplexV (StManArrayFile&, Array<DComplex>* dataPtr);
00202 void getArrayStringV (StManArrayFile&, Array<String>* dataPtr);
00203
00204
00205
00206
00207
00208
00209 void putArrayBoolV (StManArrayFile&, const Array<Bool>* dataPtr);
00210 void putArrayuCharV (StManArrayFile&, const Array<uChar>* dataPtr);
00211 void putArrayShortV (StManArrayFile&, const Array<Short>* dataPtr);
00212 void putArrayuShortV (StManArrayFile&, const Array<uShort>* dataPtr);
00213 void putArrayIntV (StManArrayFile&, const Array<Int>* dataPtr);
00214 void putArrayuIntV (StManArrayFile&, const Array<uInt>* dataPtr);
00215 void putArrayfloatV (StManArrayFile&, const Array<float>* dataPtr);
00216 void putArraydoubleV (StManArrayFile&, const Array<double>* dataPtr);
00217 void putArrayComplexV (StManArrayFile&, const Array<Complex>* dataPtr);
00218 void putArrayDComplexV (StManArrayFile&, const Array<DComplex>* dataPtr);
00219 void putArrayStringV (StManArrayFile&, const Array<String>* dataPtr);
00220
00221
00222
00223
00224
00225
00226
00227 void getSliceBoolV (StManArrayFile&, const Slicer&,
00228 Array<Bool>* dataPtr);
00229 void getSliceuCharV (StManArrayFile&, const Slicer&,
00230 Array<uChar>* dataPtr);
00231 void getSliceShortV (StManArrayFile&, const Slicer&,
00232 Array<Short>* dataPtr);
00233 void getSliceuShortV (StManArrayFile&, const Slicer&,
00234 Array<uShort>* dataPtr);
00235 void getSliceIntV (StManArrayFile&, const Slicer&,
00236 Array<Int>* dataPtr);
00237 void getSliceuIntV (StManArrayFile&, const Slicer&,
00238 Array<uInt>* dataPtr);
00239 void getSlicefloatV (StManArrayFile&, const Slicer&,
00240 Array<float>* dataPtr);
00241 void getSlicedoubleV (StManArrayFile&, const Slicer&,
00242 Array<double>* dataPtr);
00243 void getSliceComplexV (StManArrayFile&, const Slicer&,
00244 Array<Complex>* dataPtr);
00245 void getSliceDComplexV (StManArrayFile&, const Slicer&,
00246 Array<DComplex>* dataPtr);
00247 void getSliceStringV (StManArrayFile&, const Slicer&,
00248 Array<String>* dataPtr);
00249
00250
00251
00252
00253
00254
00255
00256 void putSliceBoolV (StManArrayFile&, const Slicer&,
00257 const Array<Bool>* dataPtr);
00258 void putSliceuCharV (StManArrayFile&, const Slicer&,
00259 const Array<uChar>* dataPtr);
00260 void putSliceShortV (StManArrayFile&, const Slicer&,
00261 const Array<Short>* dataPtr);
00262 void putSliceuShortV (StManArrayFile&, const Slicer&,
00263 const Array<uShort>* dataPtr);
00264 void putSliceIntV (StManArrayFile&, const Slicer&,
00265 const Array<Int>* dataPtr);
00266 void putSliceuIntV (StManArrayFile&, const Slicer&,
00267 const Array<uInt>* dataPtr);
00268 void putSlicefloatV (StManArrayFile&, const Slicer&,
00269 const Array<float>* dataPtr);
00270 void putSlicedoubleV (StManArrayFile&, const Slicer&,
00271 const Array<double>* dataPtr);
00272 void putSliceComplexV (StManArrayFile&, const Slicer&,
00273 const Array<Complex>* dataPtr);
00274 void putSliceDComplexV (StManArrayFile&, const Slicer&,
00275 const Array<DComplex>* dataPtr);
00276 void putSliceStringV (StManArrayFile&, const Slicer&,
00277 const Array<String>* dataPtr);
00278
00279
00280 private:
00281 Int64 fileOffset_p;
00282 uInt arrOffset_p;
00283
00284 IPosition shape_p;
00285
00286
00287
00288
00289
00290
00291
00292 void getSliceData (StManArrayFile&, const Slicer& ns, void* value,
00293 const IPosition& userArrayShape,
00294 void (*getVec) (StManArrayFile&,
00295 Int64, uInt, uInt, uInt, uInt,
00296 void* dataPtr));
00297
00298
00299
00300
00301 static void getVecBoolV (StManArrayFile&,
00302 Int64 fileOffset, uInt arrayStart,
00303 uInt length, uInt increment,
00304 uInt valueIndex, void* value);
00305 static void getVecuCharV (StManArrayFile&,
00306 Int64 fileOffset, uInt arrayStart,
00307 uInt length, uInt increment,
00308 uInt valueIndex, void* value);
00309 static void getVecShortV (StManArrayFile&,
00310 Int64 fileOffset, uInt arrayStart,
00311 uInt length, uInt increment,
00312 uInt valueIndex, void* value);
00313 static void getVecuShortV (StManArrayFile&,
00314 Int64 fileOffset, uInt arrayStart,
00315 uInt length, uInt increment,
00316 uInt valueIndex, void* value);
00317 static void getVecIntV (StManArrayFile&,
00318 Int64 fileOffset, uInt arrayStart,
00319 uInt length, uInt increment,
00320 uInt valueIndex, void* value);
00321 static void getVecuIntV (StManArrayFile&,
00322 Int64 fileOffset, uInt arrayStart,
00323 uInt length, uInt increment,
00324 uInt valueIndex, void* value);
00325 static void getVecfloatV (StManArrayFile&,
00326 Int64 fileOffset, uInt arrayStart,
00327 uInt length, uInt increment,
00328 uInt valueIndex, void* value);
00329 static void getVecdoubleV (StManArrayFile&,
00330 Int64 fileOffset, uInt arrayStart,
00331 uInt length, uInt increment,
00332 uInt valueIndex, void* value);
00333 static void getVecComplexV (StManArrayFile&,
00334 Int64 fileOffset, uInt arrayStart,
00335 uInt length, uInt increment,
00336 uInt valueIndex, void* value);
00337 static void getVecDComplexV (StManArrayFile&,
00338 Int64 fileOffset, uInt arrayStart,
00339 uInt length, uInt increment,
00340 uInt valueIndex, void* value);
00341 static void getVecStringV (StManArrayFile&,
00342 Int64 fileOffset, uInt arrayStart,
00343 uInt length, uInt increment,
00344 uInt valueIndex, void* value);
00345
00346
00347
00348
00349
00350
00351
00352
00353 void putSliceData (StManArrayFile&, const Slicer& ns, const void* value,
00354 const IPosition& userArrayShape,
00355 void (*putVec) (StManArrayFile&,
00356 Int64, uInt, uInt, uInt, uInt,
00357 const void* dataPtr));
00358
00359
00360
00361
00362 static void putVecBoolV (StManArrayFile&,
00363 Int64 fileOffset, uInt arrayStart,
00364 uInt length, uInt increment,
00365 uInt valueIndex, const void* value);
00366 static void putVecuCharV (StManArrayFile&,
00367 Int64 fileOffset, uInt arrayStart,
00368 uInt length, uInt increment,
00369 uInt valueIndex, const void* value);
00370 static void putVecShortV (StManArrayFile&,
00371 Int64 fileOffset, uInt arrayStart,
00372 uInt length, uInt increment,
00373 uInt valueIndex, const void* value);
00374 static void putVecuShortV (StManArrayFile&,
00375 Int64 fileOffset, uInt arrayStart,
00376 uInt length, uInt increment,
00377 uInt valueIndex, const void* value);
00378 static void putVecIntV (StManArrayFile&,
00379 Int64 fileOffset, uInt arrayStart,
00380 uInt length, uInt increment,
00381 uInt valueIndex, const void* value);
00382 static void putVecuIntV (StManArrayFile&,
00383 Int64 fileOffset, uInt arrayStart,
00384 uInt length, uInt increment,
00385 uInt valueIndex, const void* value);
00386 static void putVecfloatV (StManArrayFile&,
00387 Int64 fileOffset, uInt arrayStart,
00388 uInt length, uInt increment,
00389 uInt valueIndex, const void* value);
00390 static void putVecdoubleV (StManArrayFile&,
00391 Int64 fileOffset, uInt arrayStart,
00392 uInt length, uInt increment,
00393 uInt valueIndex, const void* value);
00394 static void putVecComplexV (StManArrayFile&,
00395 Int64 fileOffset, uInt arrayStart,
00396 uInt length, uInt increment,
00397 uInt valueIndex, const void* value);
00398 static void putVecDComplexV (StManArrayFile&,
00399 Int64 fileOffset, uInt arrayStart,
00400 uInt length, uInt increment,
00401 uInt valueIndex, const void* value);
00402 static void putVecStringV (StManArrayFile&,
00403 Int64 fileOffset, uInt arrayStart,
00404 uInt length, uInt increment,
00405 uInt valueIndex, const void* value);
00406
00407
00408
00409
00410 void checkShape (const IPosition& userArrayShape,
00411 const IPosition& tableArrayShape) const;
00412 };
00413
00414
00415
00416
00417 }
00418
00419 #endif