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_MSMINDCOLUMN_H
00029 #define TABLES_MSMINDCOLUMN_H
00030
00031
00032
00033 #include <casacore/casa/aips.h>
00034 #include <casacore/tables/DataMan/MSMColumn.h>
00035 #include <casacore/tables/DataMan/MSMBase.h>
00036 #include <casacore/casa/Arrays/IPosition.h>
00037
00038
00039 namespace casacore {
00040
00041
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 class MSMIndColumn : public MSMColumn
00077 {
00078 public:
00079
00080
00081 MSMIndColumn (MSMBase*, int dataType);
00082
00083
00084 ~MSMIndColumn();
00085
00086
00087 Bool canAccessSlice (Bool& reask) const;
00088
00089
00090 void setShapeColumn (const IPosition& shape);
00091
00092
00093 const IPosition& columnShape() const
00094 { return fixedShape_p; }
00095
00096
00097
00098 void setShape (uInt rownr, const IPosition& shape);
00099
00100
00101 Bool isShapeDefined (uInt rownr);
00102
00103
00104
00105 uInt ndim (uInt rownr);
00106
00107
00108
00109 IPosition shape (uInt rownr);
00110
00111
00112 Bool canChangeShape() const;
00113
00114
00115
00116
00117
00118 void getArrayBoolV (uInt rownr, Array<Bool>* dataPtr);
00119 void getArrayuCharV (uInt rownr, Array<uChar>* dataPtr);
00120 void getArrayShortV (uInt rownr, Array<Short>* dataPtr);
00121 void getArrayuShortV (uInt rownr, Array<uShort>* dataPtr);
00122 void getArrayIntV (uInt rownr, Array<Int>* dataPtr);
00123 void getArrayuIntV (uInt rownr, Array<uInt>* dataPtr);
00124 void getArrayfloatV (uInt rownr, Array<float>* dataPtr);
00125 void getArraydoubleV (uInt rownr, Array<double>* dataPtr);
00126 void getArrayComplexV (uInt rownr, Array<Complex>* dataPtr);
00127 void getArrayDComplexV (uInt rownr, Array<DComplex>* dataPtr);
00128 void getArrayStringV (uInt rownr, Array<String>* dataPtr);
00129
00130
00131
00132
00133
00134
00135 void putArrayBoolV (uInt rownr, const Array<Bool>* dataPtr);
00136 void putArrayuCharV (uInt rownr, const Array<uChar>* dataPtr);
00137 void putArrayShortV (uInt rownr, const Array<Short>* dataPtr);
00138 void putArrayuShortV (uInt rownr, const Array<uShort>* dataPtr);
00139 void putArrayIntV (uInt rownr, const Array<Int>* dataPtr);
00140 void putArrayuIntV (uInt rownr, const Array<uInt>* dataPtr);
00141 void putArrayfloatV (uInt rownr, const Array<float>* dataPtr);
00142 void putArraydoubleV (uInt rownr, const Array<double>* dataPtr);
00143 void putArrayComplexV (uInt rownr, const Array<Complex>* dataPtr);
00144 void putArrayDComplexV (uInt rownr, const Array<DComplex>* dataPtr);
00145 void putArrayStringV (uInt rownr, const Array<String>* dataPtr);
00146
00147
00148
00149
00150
00151
00152 void getSliceBoolV (uInt rownr, const Slicer&, Array<Bool>* dataPtr);
00153 void getSliceuCharV (uInt rownr, const Slicer&, Array<uChar>* dataPtr);
00154 void getSliceShortV (uInt rownr, const Slicer&, Array<Short>* dataPtr);
00155 void getSliceuShortV (uInt rownr, const Slicer&, Array<uShort>* dataPtr);
00156 void getSliceIntV (uInt rownr, const Slicer&, Array<Int>* dataPtr);
00157 void getSliceuIntV (uInt rownr, const Slicer&, Array<uInt>* dataPtr);
00158 void getSlicefloatV (uInt rownr, const Slicer&, Array<float>* dataPtr);
00159 void getSlicedoubleV (uInt rownr, const Slicer&, Array<double>* dataPtr);
00160 void getSliceComplexV (uInt rownr, const Slicer&, Array<Complex>* dataPtr);
00161 void getSliceDComplexV (uInt rownr, const Slicer&, Array<DComplex>* dataPtr);
00162 void getSliceStringV (uInt rownr, const Slicer&, Array<String>* dataPtr);
00163
00164
00165
00166
00167
00168
00169 void putSliceBoolV (uInt rownr, const Slicer&,
00170 const Array<Bool>* dataPtr);
00171 void putSliceuCharV (uInt rownr, const Slicer&,
00172 const Array<uChar>* dataPtr);
00173 void putSliceShortV (uInt rownr, const Slicer&,
00174 const Array<Short>* dataPtr);
00175 void putSliceuShortV (uInt rownr, const Slicer&,
00176 const Array<uShort>* dataPtr);
00177 void putSliceIntV (uInt rownr, const Slicer&,
00178 const Array<Int>* dataPtr);
00179 void putSliceuIntV (uInt rownr, const Slicer&,
00180 const Array<uInt>* dataPtr);
00181 void putSlicefloatV (uInt rownr, const Slicer&,
00182 const Array<float>* dataPtr);
00183 void putSlicedoubleV (uInt rownr, const Slicer&,
00184 const Array<double>* dataPtr);
00185 void putSliceComplexV (uInt rownr, const Slicer&,
00186 const Array<Complex>* dataPtr);
00187 void putSliceDComplexV (uInt rownr, const Slicer&,
00188 const Array<DComplex>* dataPtr);
00189 void putSliceStringV (uInt rownr, const Slicer&,
00190 const Array<String>* dataPtr);
00191
00192
00193
00194
00195 void remove (uInt rownr);
00196
00197
00198 private:
00199 class Data {
00200 public:
00201 Data (const IPosition& shape, int dtype);
00202 ~Data();
00203 void clear (int dtype);
00204 const IPosition& shape() const {return shape_p;}
00205 void* data() {return data_p;}
00206 private:
00207 Data (const Data&);
00208 Data& operator= (const Data&);
00209 IPosition shape_p;
00210 void* data_p;
00211 };
00212
00213 IPosition fixedShape_p;
00214
00215 uInt elemSize_p;
00216
00217 uInt startSize_p;
00218
00219
00220
00221 void deleteArray (uInt rownr);
00222
00223
00224
00225 Data* getShape (uInt rownr);
00226
00227
00228 void* getDataPtr (uInt rownr)
00229 { return (char*)(getShape(rownr)) + startSize_p; }
00230
00231
00232 MSMIndColumn (const MSMIndColumn&);
00233
00234
00235 MSMIndColumn& operator= (const MSMIndColumn&);
00236 };
00237
00238
00239
00240 }
00241
00242 #endif