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_ISMINDCOLUMN_H
00029 #define TABLES_ISMINDCOLUMN_H
00030
00031
00032
00033 #include <casacore/casa/aips.h>
00034 #include <casacore/tables/DataMan/ISMColumn.h>
00035 #include <casacore/tables/DataMan/StIndArray.h>
00036 #include <casacore/casa/Arrays/IPosition.h>
00037
00038 namespace casacore {
00039
00040
00041 class StManArrayFile;
00042 class AipsIO;
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 class ISMIndColumn : public ISMColumn
00100 {
00101 public:
00102
00103
00104
00105 ISMIndColumn (ISMBase* parent, int dataType, uInt colnr);
00106
00107
00108 ~ISMIndColumn();
00109
00110
00111 virtual Bool canAccessSlice (Bool& reask) const;
00112
00113
00114 virtual void addRow (uInt newNrrow, uInt oldNrrow);
00115
00116
00117 virtual void setShapeColumn (const IPosition& shape);
00118
00119
00120 virtual uInt ndim (uInt rownr);
00121
00122
00123
00124 void setShape (uInt rownr, const IPosition& shape);
00125
00126
00127 virtual Bool isShapeDefined (uInt rownr);
00128
00129
00130 virtual IPosition shape (uInt rownr);
00131
00132
00133 Bool canChangeShape() const;
00134
00135
00136
00137
00138
00139 virtual void getArrayBoolV (uInt rownr, Array<Bool>* dataPtr);
00140 virtual void getArrayuCharV (uInt rownr, Array<uChar>* dataPtr);
00141 virtual void getArrayShortV (uInt rownr, Array<Short>* dataPtr);
00142 virtual void getArrayuShortV (uInt rownr, Array<uShort>* dataPtr);
00143 virtual void getArrayIntV (uInt rownr, Array<Int>* dataPtr);
00144 virtual void getArrayuIntV (uInt rownr, Array<uInt>* dataPtr);
00145 virtual void getArrayfloatV (uInt rownr, Array<float>* dataPtr);
00146 virtual void getArraydoubleV (uInt rownr, Array<double>* dataPtr);
00147 virtual void getArrayComplexV (uInt rownr, Array<Complex>* dataPtr);
00148 virtual void getArrayDComplexV (uInt rownr, Array<DComplex>* dataPtr);
00149 virtual void getArrayStringV (uInt rownr, Array<String>* dataPtr);
00150
00151
00152
00153
00154
00155
00156 virtual void putArrayBoolV (uInt rownr, const Array<Bool>* dataPtr);
00157 virtual void putArrayuCharV (uInt rownr, const Array<uChar>* dataPtr);
00158 virtual void putArrayShortV (uInt rownr, const Array<Short>* dataPtr);
00159 virtual void putArrayuShortV (uInt rownr, const Array<uShort>* dataPtr);
00160 virtual void putArrayIntV (uInt rownr, const Array<Int>* dataPtr);
00161 virtual void putArrayuIntV (uInt rownr, const Array<uInt>* dataPtr);
00162 virtual void putArrayfloatV (uInt rownr, const Array<float>* dataPtr);
00163 virtual void putArraydoubleV (uInt rownr, const Array<double>* dataPtr);
00164 virtual void putArrayComplexV (uInt rownr, const Array<Complex>* dataPtr);
00165 virtual void putArrayDComplexV (uInt rownr, const Array<DComplex>* dataPtr);
00166 virtual void putArrayStringV (uInt rownr, const Array<String>* dataPtr);
00167
00168
00169
00170
00171
00172
00173 virtual void getSliceBoolV (uInt rownr, const Slicer&,
00174 Array<Bool>* dataPtr);
00175 virtual void getSliceuCharV (uInt rownr, const Slicer&,
00176 Array<uChar>* dataPtr);
00177 virtual void getSliceShortV (uInt rownr, const Slicer&,
00178 Array<Short>* dataPtr);
00179 virtual void getSliceuShortV (uInt rownr, const Slicer&,
00180 Array<uShort>* dataPtr);
00181 virtual void getSliceIntV (uInt rownr, const Slicer&,
00182 Array<Int>* dataPtr);
00183 virtual void getSliceuIntV (uInt rownr, const Slicer&,
00184 Array<uInt>* dataPtr);
00185 virtual void getSlicefloatV (uInt rownr, const Slicer&,
00186 Array<float>* dataPtr);
00187 virtual void getSlicedoubleV (uInt rownr, const Slicer&,
00188 Array<double>* dataPtr);
00189 virtual void getSliceComplexV (uInt rownr, const Slicer&,
00190 Array<Complex>* dataPtr);
00191 virtual void getSliceDComplexV (uInt rownr, const Slicer&,
00192 Array<DComplex>* dataPtr);
00193 virtual void getSliceStringV (uInt rownr, const Slicer&,
00194 Array<String>* dataPtr);
00195
00196
00197
00198
00199
00200
00201 virtual void putSliceBoolV (uInt rownr, const Slicer&,
00202 const Array<Bool>* dataPtr);
00203 virtual void putSliceuCharV (uInt rownr, const Slicer&,
00204 const Array<uChar>* dataPtr);
00205 virtual void putSliceShortV (uInt rownr, const Slicer&,
00206 const Array<Short>* dataPtr);
00207 virtual void putSliceuShortV (uInt rownr, const Slicer&,
00208 const Array<uShort>* dataPtr);
00209 virtual void putSliceIntV (uInt rownr, const Slicer&,
00210 const Array<Int>* dataPtr);
00211 virtual void putSliceuIntV (uInt rownr, const Slicer&,
00212 const Array<uInt>* dataPtr);
00213 virtual void putSlicefloatV (uInt rownr, const Slicer&,
00214 const Array<float>* dataPtr);
00215 virtual void putSlicedoubleV (uInt rownr, const Slicer&,
00216 const Array<double>* dataPtr);
00217 virtual void putSliceComplexV (uInt rownr, const Slicer&,
00218 const Array<Complex>* dataPtr);
00219 virtual void putSliceDComplexV (uInt rownr, const Slicer&,
00220 const Array<DComplex>* dataPtr);
00221 virtual void putSliceStringV (uInt rownr, const Slicer&,
00222 const Array<String>* dataPtr);
00223
00224
00225
00226 virtual void doCreate (ISMBucket* bucket);
00227
00228
00229 virtual void getFile (uInt nrrow);
00230
00231
00232 virtual Bool flush (uInt nrrow, Bool fsync);
00233
00234
00235 virtual void resync (uInt nrrow);
00236
00237
00238 virtual void reopenRW();
00239
00240
00241 virtual void handleCopy (uInt rownr, const char* value);
00242
00243
00244 virtual void handleRemove (uInt rownr, const char* value);
00245
00246 private:
00247
00248 ISMIndColumn (const ISMIndColumn&);
00249
00250
00251 ISMIndColumn& operator= (const ISMIndColumn&);
00252
00253
00254
00255 void init (ByteIO::OpenOption fileOption);
00256
00257
00258 void clear();
00259
00260
00261
00262
00263
00264 virtual Bool compareValue (const void* val1, const void* val2) const;
00265
00266
00267
00268
00269 StIndArray* getShape (uInt rownr);
00270
00271
00272
00273
00274 StIndArray* putShape (uInt rownr, const IPosition& shape);
00275
00276
00277
00278
00279
00280 StIndArray* putShapeSliced (uInt rownr);
00281
00282
00283 StIndArray* getArrayPtr (uInt rownr);
00284
00285
00286
00287 StIndArray* putArrayPtr (uInt rownr, const IPosition& shape,
00288 Bool copyData);
00289
00290
00291
00292 uInt seqnr_p;
00293
00294 IPosition fixedShape_p;
00295
00296 Bool shapeIsFixed_p;
00297
00298 StManArrayFile* iosfile_p;
00299
00300 StIndArray indArray_p;
00301
00302 Bool foundArray_p;
00303 };
00304
00305
00306
00307
00308 }
00309
00310 #endif