casa
$Rev:20696$
|
00001 //# StManColumn.h: Base storage manager column class 00002 //# Copyright (C) 1994,1995,1996,1998,2002 00003 //# Associated Universities, Inc. Washington DC, USA. 00004 //# 00005 //# This library is free software; you can redistribute it and/or modify it 00006 //# under the terms of the GNU Library General Public License as published by 00007 //# the Free Software Foundation; either version 2 of the License, or (at your 00008 //# option) any later version. 00009 //# 00010 //# This library is distributed in the hope that it will be useful, but WITHOUT 00011 //# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 00012 //# FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public 00013 //# License for more details. 00014 //# 00015 //# You should have received a copy of the GNU Library General Public License 00016 //# along with this library; if not, write to the Free Software Foundation, 00017 //# Inc., 675 Massachusetts Ave, Cambridge, MA 02139, USA. 00018 //# 00019 //# Correspondence concerning AIPS++ should be addressed as follows: 00020 //# Internet email: aips2-request@nrao.edu. 00021 //# Postal address: AIPS++ Project Office 00022 //# National Radio Astronomy Observatory 00023 //# 520 Edgemont Road 00024 //# Charlottesville, VA 22903-2475 USA 00025 //# 00026 //# $Id: StManColumn.h 20551 2009-03-25 00:11:33Z Malte.Marquarding $ 00027 00028 #ifndef TABLES_STMANCOLUMN_H 00029 #define TABLES_STMANCOLUMN_H 00030 00031 00032 //# Includes 00033 #include <casa/aips.h> 00034 #include <tables/Tables/DataManager.h> 00035 00036 namespace casa { //# NAMESPACE CASA - BEGIN 00037 00038 //# Forward Declarations 00039 template<class T> class Vector; 00040 00041 00042 // <summary> 00043 // Base table column storage manager class 00044 // </summary> 00045 00046 // <use visibility=local> 00047 00048 // <reviewed reviewer="Gareth Hunt" date="94Nov17" tests=""> 00049 // </reviewed> 00050 00051 // <prerequisite> 00052 //# Classes you should understand before using this one. 00053 // <li> DataManagerColumn 00054 // </prerequisite> 00055 00056 // <etymology> 00057 // StManColumn handles a column for a storage manager. 00058 // </etymology> 00059 00060 // <synopsis> 00061 // StManColumn is the abstract base class to handle a column in all 00062 // kind of storage managers. It is derived from DataManagerColumn 00063 // and implements several virtual functions for derived storage 00064 // manager column classes (like StManColumnAipsIO). 00065 // 00066 // All get and put functions (except for single scalars) in the abstract 00067 // base class DataManagerColumn have a generic void* data argument. 00068 // This is done to allow arbitrary typed arguments. This can be done 00069 // because the data type of the derived class always matches the 00070 // type of the data argument. 00071 // However, at one time the void* has to be casted to the exact type. 00072 // Storage managers only support the standard data types; therefore 00073 // it is possible to do the cast in a base class. This concentrates 00074 // the burden in one class and allows the derived classes to work 00075 // with correctly typed arguments. 00076 // The price is an extra virtual function call, but that is not a 00077 // problem for (expensive) operations on arrays. 00078 // It is not done for single scalars, because that price may be too high. 00079 // 00080 // See StManColumnAipsIO for the get/put functions required in a storage 00081 // manager column class handling scalars. 00082 // See StManColumnArrayAipsIO for the get/put functions required in a 00083 // storage manager column class handling arrays. This class also 00084 // contains the shape functions for direct arrays, while 00085 // StManColumnIndArrayAipsIO contains the shape functions for indirec 00086 // arrays. 00087 // 00088 // StManColumn also contains the data type of the column (which it 00089 // gets from the derived classes at construction time) and implements 00090 // the function dataType on behalf of its derived classes. 00091 // </synopsis> 00092 00093 // <motivation> 00094 // Making life easier for the derived classes. 00095 // </motivation> 00096 00097 // <todo asof="$DATE:$"> 00098 //# A List of bugs, limitations, extensions or planned refinements. 00099 // </todo> 00100 00101 00102 class StManColumn : public DataManagerColumn 00103 { 00104 public: 00105 00106 // Default constructor. 00107 StManColumn (int dataType); 00108 00109 ~StManColumn(); 00110 00111 // Test if the given data type is supported by storage managers. 00112 // It is used by the function Table::isNativeDataType. 00113 static Bool isNativeDataType (int dtype); 00114 00115 // Return the data type of the column. 00116 int dataType() const; 00117 00118 // By default the storage manager can handle access to a scalar column. 00119 Bool canAccessScalarColumn (Bool& reask) const; 00120 00121 // All storage managers can handle access to scalar column cells, because 00122 // this class contains a default implementation of getScalarColumnCellsV. 00123 Bool canAccessScalarColumnCells (Bool& reask) const; 00124 00125 // All storage managers can handle access to array column cells, because 00126 // this class contains a default implementation of getArrayColumnCellsV. 00127 Bool canAccessArrayColumnCells (Bool& reask) const; 00128 00129 // Get all scalar values in the column. 00130 // The argument dataPtr is in fact a Vector<T>*, but a void* 00131 // is needed to be generic. 00132 // The vector pointed to by dataPtr has to have the correct length 00133 // (which is guaranteed by the ScalarColumn getColumn function). 00134 // The default implementation calls the appropriate getScalarColumnXXV. 00135 void getScalarColumnV (void* dataPtr); 00136 00137 // Put all scalar values in the column. 00138 // The argument dataPtr is in fact a const Vector<T>*, but a const void* 00139 // is needed to be generic. 00140 // The vector pointed to by dataPtr has to have the correct length 00141 // (which is guaranteed by the ScalarColumn putColumn function). 00142 // The default implementation calls the appropriate putScalarColumnXXV. 00143 void putScalarColumnV (const void* dataPtr); 00144 00145 // Get some scalar values in the column. 00146 // The argument dataPtr is in fact a Vector<T>*, but a void* 00147 // is needed to be generic. 00148 // The vector pointed to by dataPtr has to have the correct length 00149 // (which is guaranteed by the ScalarColumn getColumn function). 00150 // The default implementation calls the appropriate getScalarColumnCellsXXV. 00151 void getScalarColumnCellsV (const RefRows& rownrs, 00152 void* dataPtr); 00153 00154 // Put some scalar values in the column. 00155 // The argument dataPtr is in fact a const Vector<T>*, but a const void* 00156 // is needed to be generic. 00157 // The vector pointed to by dataPtr has to have the correct length 00158 // (which is guaranteed by the ScalarColumn getColumn function). 00159 // The default implementation calls the appropriate putScalarColumnCellsXXV. 00160 void putScalarColumnCellsV (const RefRows& rownrs, 00161 const void* dataPtr); 00162 00163 // Get scalars from the given row on with a maximum of nrmax values. 00164 // It returns the actual number of values got. 00165 // This can be used to get an entire column of scalars or to get 00166 // a part of a column (for a cache for example). 00167 // The argument dataPtr is in fact a T*, but a void* 00168 // is needed to be generic. 00169 // The default implementation calls the appropriate getBlockXXV function. 00170 uInt getBlockV (uInt rownr, uInt nrmax, void* dataPtr); 00171 00172 // Put nrmax scalars from the given row on. 00173 // It returns the actual number of values put. 00174 // This can be used to put an entire column of scalars or to put 00175 // a part of a column (for a cache for example). 00176 // The argument dataPtr is in fact a const T*, but a const void* 00177 // is needed to be generic. 00178 // The default implementation calls the appropriate putBlockXXV function. 00179 void putBlockV (uInt rownr, uInt nrmax, const void* dataPtr); 00180 00181 // Get the array value in the given row. 00182 // The argument dataPtr is in fact an Array<T>*, but a void* 00183 // is needed to be generic. 00184 // The array pointed to by dataPtr has to have the correct shape 00185 // (which is guaranteed by the ArrayColumn get function). 00186 // The default implementation calls the appropriate getArrayXXV. 00187 void getArrayV (uInt rownr, void* dataPtr); 00188 00189 // Put the array value into the given row. 00190 // The argument dataPtr is in fact a const Array<T>*, but a const void* 00191 // is needed to be generic. 00192 // The array pointed to by dataPtr has to have the correct shape 00193 // (which is guaranteed by the ArrayColumn put function). 00194 // The default implementation calls the appropriate putArrayXXV. 00195 void putArrayV (uInt rownr, const void* dataPtr); 00196 00197 // Get all array values in the column. 00198 // The argument dataPtr is in fact an Array<T>*, but a void* 00199 // is needed to be generic. 00200 // The vector pointed to by dataPtr has to have the correct length 00201 // (which is guaranteed by the ArrayColumn getColumn function). 00202 // The default implementation calls the appropriate getArrayColumnXXV. 00203 void getArrayColumnV (void* dataPtr); 00204 00205 // Put all array values in the column. 00206 // The argument dataPtr is in fact a const Array<T>*, but a const void* 00207 // is needed to be generic. 00208 // The vector pointed to by dataPtr has to have the correct length 00209 // (which is guaranteed by the ArrayColumn putColumn function). 00210 // The default implementation calls the appropriate putArrayColumnXXV. 00211 void putArrayColumnV (const void* dataPtr); 00212 00213 // Get some array values in the column. 00214 // The argument dataPtr is in fact an Array<T>*, but a void* 00215 // is needed to be generic. 00216 // The vector pointed to by dataPtr has to have the correct length 00217 // (which is guaranteed by the ArrayColumn getColumn function). 00218 // The default implementation calls the appropriate getArrayColumnCellsXXV. 00219 void getArrayColumnCellsV (const RefRows& rownrs, void* dataPtr); 00220 00221 // Put some array values in the column. 00222 // The argument dataPtr is in fact an const Array<T>*, but a const void* 00223 // is needed to be generic. 00224 // The vector pointed to by dataPtr has to have the correct length 00225 // (which is guaranteed by the ArrayColumn getColumn function). 00226 // The default implementation calls the appropriate putArrayColumnCellsXXV. 00227 void putArrayColumnCellsV (const RefRows& rownrs, const void* dataPtr); 00228 00229 // Get a section of the array in the given row. 00230 // The argument dataPtr is in fact an Array<T>*, but a void* 00231 // is needed to be generic. 00232 // The array pointed to by dataPtr has to have the correct shape 00233 // (which is guaranteed by the ArrayColumn getSlice function). 00234 // The default implementation calls the appropriate getSliceXXV. 00235 void getSliceV (uInt rownr, const Slicer& slicer, void* dataPtr); 00236 00237 // Put into a section of the array in the given row. 00238 // The argument dataPtr is in fact a const Array<T>*, but a const void* 00239 // is needed to be generic. 00240 // The array pointed to by dataPtr has to have the correct shape 00241 // (which is guaranteed by the ArrayColumn putSlice function). 00242 // The default implementation calls the appropriate putSliceXXV. 00243 void putSliceV (uInt rownr, const Slicer& slicer, const void* dataPtr); 00244 00245 // Get a section of all arrays in the column. 00246 // The argument dataPtr is in fact an Array<T>*, but a void* 00247 // is needed to be generic. 00248 // The array pointed to by dataPtr has to have the correct shape 00249 // (which is guaranteed by the ArrayColumn getColumn function). 00250 // The default implementation calls the appropriate getColumnSliceXXV. 00251 void getColumnSliceV (const Slicer& slicer, void* dataPtr); 00252 00253 // Put into a section of all arrays in the column. 00254 // The argument dataPtr is in fact a const Array<T>*, but a const void* 00255 // is needed to be generic. 00256 // The array pointed to by dataPtr has to have the correct shape 00257 // (which is guaranteed by the ArrayColumn putColumn function). 00258 // The default implementation calls the appropriate putColumnSliceXXV. 00259 void putColumnSliceV (const Slicer& slicer, const void* dataPtr); 00260 00261 // Get a section of some arrays in the column. 00262 // The argument dataPtr is in fact an Array<T>*, but a void* 00263 // is needed to be generic. 00264 // The array pointed to by dataPtr has to have the correct shape 00265 // (which is guaranteed by the ArrayColumn getColumn function). 00266 // The default implementation calls the appropriate getColumnSliceCellsXXV. 00267 virtual void getColumnSliceCellsV (const RefRows& rownrs, 00268 const Slicer& slicer, void* dataPtr); 00269 00270 // Put into a section of some arrays in the column. 00271 // The argument dataPtr is in fact a const Array<T>*, but a const void* 00272 // is needed to be generic. 00273 // The array pointed to by dataPtr has to have the correct shape 00274 // (which is guaranteed by the ArrayColumn putColumn function). 00275 // The default implementation calls the appropriate putColumnSliceCellsXXV. 00276 virtual void putColumnSliceCellsV (const RefRows& rownrs, 00277 const Slicer& slicer, 00278 const void* dataPtr); 00279 00280 00281 private: 00282 // The object cannot be copied. 00283 StManColumn (const StManColumn&); 00284 00285 // The object cannot be assigned to. 00286 StManColumn& operator= (const StManColumn&); 00287 00288 // Throw an "invalid operation" exception for the default 00289 // implementation of getArray. 00290 void throwGetArray() const; 00291 00292 // Throw an "invalid operation" exception for the default 00293 // implementation of putArray. 00294 void throwPutArray() const; 00295 00296 00297 protected: 00298 // Get the scalar values in the entire column. 00299 // The buffer pointed to by dataPtr has to have the correct length. 00300 // (which is guaranteed by the ScalarColumn getColumn function). 00301 // The default implementation uses the corresponding getBlockXXXV. 00302 // <group> 00303 virtual void getScalarColumnBoolV (Vector<Bool>* dataPtr); 00304 virtual void getScalarColumnuCharV (Vector<uChar>* dataPtr); 00305 virtual void getScalarColumnShortV (Vector<Short>* dataPtr); 00306 virtual void getScalarColumnuShortV (Vector<uShort>* dataPtr); 00307 virtual void getScalarColumnIntV (Vector<Int>* dataPtr); 00308 virtual void getScalarColumnuIntV (Vector<uInt>* dataPtr); 00309 virtual void getScalarColumnfloatV (Vector<float>* dataPtr); 00310 virtual void getScalarColumndoubleV (Vector<double>* dataPtr); 00311 virtual void getScalarColumnComplexV (Vector<Complex>* dataPtr); 00312 virtual void getScalarColumnDComplexV (Vector<DComplex>* dataPtr); 00313 virtual void getScalarColumnStringV (Vector<String>* dataPtr); 00314 // </group> 00315 00316 // Put the scalar values into the entire column. 00317 // The buffer pointed to by dataPtr has to have the correct length. 00318 // (which is guaranteed by the ScalarColumn putColumn function). 00319 // The default implementation uses the corresponding putBlockXXXV. 00320 // <group> 00321 virtual void putScalarColumnBoolV (const Vector<Bool>* dataPtr); 00322 virtual void putScalarColumnuCharV (const Vector<uChar>* dataPtr); 00323 virtual void putScalarColumnShortV (const Vector<Short>* dataPtr); 00324 virtual void putScalarColumnuShortV (const Vector<uShort>* dataPtr); 00325 virtual void putScalarColumnIntV (const Vector<Int>* dataPtr); 00326 virtual void putScalarColumnuIntV (const Vector<uInt>* dataPtr); 00327 virtual void putScalarColumnfloatV (const Vector<float>* dataPtr); 00328 virtual void putScalarColumndoubleV (const Vector<double>* dataPtr); 00329 virtual void putScalarColumnComplexV (const Vector<Complex>* dataPtr); 00330 virtual void putScalarColumnDComplexV (const Vector<DComplex>* dataPtr); 00331 virtual void putScalarColumnStringV (const Vector<String>* dataPtr); 00332 // </group> 00333 00334 // Get the scalar values in some cells of the column. 00335 // The buffer pointed to by dataPtr has to have the correct length. 00336 // (which is guaranteed by the ScalarColumn getColumnCells function). 00337 // The default implementation loops through all rows. 00338 // <group> 00339 virtual void getScalarColumnCellsBoolV (const RefRows& rownrs, 00340 Vector<Bool>* dataPtr); 00341 virtual void getScalarColumnCellsuCharV (const RefRows& rownrs, 00342 Vector<uChar>* dataPtr); 00343 virtual void getScalarColumnCellsShortV (const RefRows& rownrs, 00344 Vector<Short>* dataPtr); 00345 virtual void getScalarColumnCellsuShortV (const RefRows& rownrs, 00346 Vector<uShort>* dataPtr); 00347 virtual void getScalarColumnCellsIntV (const RefRows& rownrs, 00348 Vector<Int>* dataPtr); 00349 virtual void getScalarColumnCellsuIntV (const RefRows& rownrs, 00350 Vector<uInt>* dataPtr); 00351 virtual void getScalarColumnCellsfloatV (const RefRows& rownrs, 00352 Vector<float>* dataPtr); 00353 virtual void getScalarColumnCellsdoubleV (const RefRows& rownrs, 00354 Vector<double>* dataPtr); 00355 virtual void getScalarColumnCellsComplexV (const RefRows& rownrs, 00356 Vector<Complex>* dataPtr); 00357 virtual void getScalarColumnCellsDComplexV (const RefRows& rownrs, 00358 Vector<DComplex>* dataPtr); 00359 virtual void getScalarColumnCellsStringV (const RefRows& rownrs, 00360 Vector<String>* dataPtr); 00361 // </group> 00362 00363 // Put the scalar values into some cells of the column. 00364 // The buffer pointed to by dataPtr has to have the correct length. 00365 // (which is guaranteed by the ScalarColumn putColumnCells function). 00366 // The default implementation loops through all rows. 00367 // <group> 00368 virtual void putScalarColumnCellsBoolV (const RefRows& rownrs, 00369 const Vector<Bool>* dataPtr); 00370 virtual void putScalarColumnCellsuCharV (const RefRows& rownrs, 00371 const Vector<uChar>* dataPtr); 00372 virtual void putScalarColumnCellsShortV (const RefRows& rownrs, 00373 const Vector<Short>* dataPtr); 00374 virtual void putScalarColumnCellsuShortV (const RefRows& rownrs, 00375 const Vector<uShort>* dataPtr); 00376 virtual void putScalarColumnCellsIntV (const RefRows& rownrs, 00377 const Vector<Int>* dataPtr); 00378 virtual void putScalarColumnCellsuIntV (const RefRows& rownrs, 00379 const Vector<uInt>* dataPtr); 00380 virtual void putScalarColumnCellsfloatV (const RefRows& rownrs, 00381 const Vector<float>* dataPtr); 00382 virtual void putScalarColumnCellsdoubleV (const RefRows& rownrs, 00383 const Vector<double>* dataPtr); 00384 virtual void putScalarColumnCellsComplexV (const RefRows& rownrs, 00385 const Vector<Complex>* dataPtr); 00386 virtual void putScalarColumnCellsDComplexV (const RefRows& rownrs, 00387 const Vector<DComplex>* dataPtr); 00388 virtual void putScalarColumnCellsStringV (const RefRows& rownrs, 00389 const Vector<String>* dataPtr); 00390 // </group> 00391 00392 // Get scalars from the given row on with a maximum of nrmax values. 00393 // This can be used to get an entire column of scalars or to get 00394 // a part of a column (for a cache for example). 00395 // The buffer pointed to by dataPtr has to have the length nrmax. 00396 // (which is guaranteed by the ScalarColumn get function). 00397 // The default implementation gets one value. 00398 // <group> 00399 virtual uInt getBlockBoolV (uInt rownr, uInt nrmax, 00400 Bool* dataPtr); 00401 virtual uInt getBlockuCharV (uInt rownr, uInt nrmax, 00402 uChar* dataPtr); 00403 virtual uInt getBlockShortV (uInt rownr, uInt nrmax, 00404 Short* dataPtr); 00405 virtual uInt getBlockuShortV (uInt rownr, uInt nrmax, 00406 uShort* dataPtr); 00407 virtual uInt getBlockIntV (uInt rownr, uInt nrmax, 00408 Int* dataPtr); 00409 virtual uInt getBlockuIntV (uInt rownr, uInt nrmax, 00410 uInt* dataPtr); 00411 virtual uInt getBlockfloatV (uInt rownr, uInt nrmax, 00412 float* dataPtr); 00413 virtual uInt getBlockdoubleV (uInt rownr, uInt nrmax, 00414 double* dataPtr); 00415 virtual uInt getBlockComplexV (uInt rownr, uInt nrmax, 00416 Complex* dataPtr); 00417 virtual uInt getBlockDComplexV (uInt rownr, uInt nrmax, 00418 DComplex* dataPtr); 00419 virtual uInt getBlockStringV (uInt rownr, uInt nrmax, 00420 String* dataPtr); 00421 // </group> 00422 00423 // Put nrmax scalars from the given row on. 00424 // This can be used to put an entire column of scalars or to put 00425 // a part of a column (for a cache for example). 00426 // The buffer pointed to by dataPtr has to have the length nrmax. 00427 // The default implementation puts one value at the time. 00428 // <group> 00429 virtual void putBlockBoolV (uInt rownr, uInt nrmax, 00430 const Bool* dataPtr); 00431 virtual void putBlockuCharV (uInt rownr, uInt nrmax, 00432 const uChar* dataPtr); 00433 virtual void putBlockShortV (uInt rownr, uInt nrmax, 00434 const Short* dataPtr); 00435 virtual void putBlockuShortV (uInt rownr, uInt nrmax, 00436 const uShort* dataPtr); 00437 virtual void putBlockIntV (uInt rownr, uInt nrmax, 00438 const Int* dataPtr); 00439 virtual void putBlockuIntV (uInt rownr, uInt nrmax, 00440 const uInt* dataPtr); 00441 virtual void putBlockfloatV (uInt rownr, uInt nrmax, 00442 const float* dataPtr); 00443 virtual void putBlockdoubleV (uInt rownr, uInt nrmax, 00444 const double* dataPtr); 00445 virtual void putBlockComplexV (uInt rownr, uInt nrmax, 00446 const Complex* dataPtr); 00447 virtual void putBlockDComplexV (uInt rownr, uInt nrmax, 00448 const DComplex* dataPtr); 00449 virtual void putBlockStringV (uInt rownr, uInt nrmax, 00450 const String* dataPtr); 00451 // </group> 00452 00453 // Get the array value in the given row. 00454 // The array pointed to by dataPtr has to have the correct length 00455 // (which is guaranteed by the ArrayColumn get function). 00456 // The default implementation loops through all rows. 00457 // <group> 00458 virtual void getArrayBoolV (uInt rownr, Array<Bool>* dataPtr); 00459 virtual void getArrayuCharV (uInt rownr, Array<uChar>* dataPtr); 00460 virtual void getArrayShortV (uInt rownr, Array<Short>* dataPtr); 00461 virtual void getArrayuShortV (uInt rownr, Array<uShort>* dataPtr); 00462 virtual void getArrayIntV (uInt rownr, Array<Int>* dataPtr); 00463 virtual void getArrayuIntV (uInt rownr, Array<uInt>* dataPtr); 00464 virtual void getArrayfloatV (uInt rownr, Array<float>* dataPtr); 00465 virtual void getArraydoubleV (uInt rownr, Array<double>* dataPtr); 00466 virtual void getArrayComplexV (uInt rownr, Array<Complex>* dataPtr); 00467 virtual void getArrayDComplexV (uInt rownr, Array<DComplex>* dataPtr); 00468 virtual void getArrayStringV (uInt rownr, Array<String>* dataPtr); 00469 // </group> 00470 00471 // Put the array value into the given row. 00472 // The buffer pointed to by dataPtr has to have the correct length 00473 // (which is guaranteed by the ArrayColumn put function). 00474 // The default implementation loops through all rows. 00475 // <group> 00476 virtual void putArrayBoolV (uInt rownr, 00477 const Array<Bool>* dataPtr); 00478 virtual void putArrayuCharV (uInt rownr, 00479 const Array<uChar>* dataPtr); 00480 virtual void putArrayShortV (uInt rownr, 00481 const Array<Short>* dataPtr); 00482 virtual void putArrayuShortV (uInt rownr, 00483 const Array<uShort>* dataPtr); 00484 virtual void putArrayIntV (uInt rownr, 00485 const Array<Int>* dataPtr); 00486 virtual void putArrayuIntV (uInt rownr, 00487 const Array<uInt>* dataPtr); 00488 virtual void putArrayfloatV (uInt rownr, 00489 const Array<float>* dataPtr); 00490 virtual void putArraydoubleV (uInt rownr, 00491 const Array<double>* dataPtr); 00492 virtual void putArrayComplexV (uInt rownr, 00493 const Array<Complex>* dataPtr); 00494 virtual void putArrayDComplexV (uInt rownr, 00495 const Array<DComplex>* dataPtr); 00496 virtual void putArrayStringV (uInt rownr, 00497 const Array<String>* dataPtr); 00498 // </group> 00499 00500 // Get the array values in the entire column. 00501 // The buffer pointed to by dataPtr has to have the correct length. 00502 // (which is guaranteed by the ArrayColumn getColumn function). 00503 // The default implementation uses the corresponding getBlockXXXV. 00504 // <group> 00505 virtual void getArrayColumnBoolV (Array<Bool>* dataPtr); 00506 virtual void getArrayColumnuCharV (Array<uChar>* dataPtr); 00507 virtual void getArrayColumnShortV (Array<Short>* dataPtr); 00508 virtual void getArrayColumnuShortV (Array<uShort>* dataPtr); 00509 virtual void getArrayColumnIntV (Array<Int>* dataPtr); 00510 virtual void getArrayColumnuIntV (Array<uInt>* dataPtr); 00511 virtual void getArrayColumnfloatV (Array<float>* dataPtr); 00512 virtual void getArrayColumndoubleV (Array<double>* dataPtr); 00513 virtual void getArrayColumnComplexV (Array<Complex>* dataPtr); 00514 virtual void getArrayColumnDComplexV (Array<DComplex>* dataPtr); 00515 virtual void getArrayColumnStringV (Array<String>* dataPtr); 00516 // </group> 00517 00518 // Put the array values into the entire column. 00519 // The buffer pointed to by dataPtr has to have the correct length. 00520 // (which is guaranteed by the ArrayColumn putColumn function). 00521 // The default implementation uses the corresponding putBlockXXXV. 00522 // <group> 00523 virtual void putArrayColumnBoolV (const Array<Bool>* dataPtr); 00524 virtual void putArrayColumnuCharV (const Array<uChar>* dataPtr); 00525 virtual void putArrayColumnShortV (const Array<Short>* dataPtr); 00526 virtual void putArrayColumnuShortV (const Array<uShort>* dataPtr); 00527 virtual void putArrayColumnIntV (const Array<Int>* dataPtr); 00528 virtual void putArrayColumnuIntV (const Array<uInt>* dataPtr); 00529 virtual void putArrayColumnfloatV (const Array<float>* dataPtr); 00530 virtual void putArrayColumndoubleV (const Array<double>* dataPtr); 00531 virtual void putArrayColumnComplexV (const Array<Complex>* dataPtr); 00532 virtual void putArrayColumnDComplexV (const Array<DComplex>* dataPtr); 00533 virtual void putArrayColumnStringV (const Array<String>* dataPtr); 00534 // </group> 00535 00536 // Get the array values in some cells of the column. 00537 // The buffer pointed to by dataPtr has to have the correct length. 00538 // (which is guaranteed by the ArrayColumn getColumnCells function). 00539 // The default implementation throws an "invalid operation exception". 00540 // <group> 00541 virtual void getArrayColumnCellsBoolV (const RefRows& rownrs, 00542 Array<Bool>* dataPtr); 00543 virtual void getArrayColumnCellsuCharV (const RefRows& rownrs, 00544 Array<uChar>* dataPtr); 00545 virtual void getArrayColumnCellsShortV (const RefRows& rownrs, 00546 Array<Short>* dataPtr); 00547 virtual void getArrayColumnCellsuShortV (const RefRows& rownrs, 00548 Array<uShort>* dataPtr); 00549 virtual void getArrayColumnCellsIntV (const RefRows& rownrs, 00550 Array<Int>* dataPtr); 00551 virtual void getArrayColumnCellsuIntV (const RefRows& rownrs, 00552 Array<uInt>* dataPtr); 00553 virtual void getArrayColumnCellsfloatV (const RefRows& rownrs, 00554 Array<float>* dataPtr); 00555 virtual void getArrayColumnCellsdoubleV (const RefRows& rownrs, 00556 Array<double>* dataPtr); 00557 virtual void getArrayColumnCellsComplexV (const RefRows& rownrs, 00558 Array<Complex>* dataPtr); 00559 virtual void getArrayColumnCellsDComplexV (const RefRows& rownrs, 00560 Array<DComplex>* dataPtr); 00561 virtual void getArrayColumnCellsStringV (const RefRows& rownrs, 00562 Array<String>* dataPtr); 00563 // </group> 00564 00565 // Put the array values into some cells of the column. 00566 // The buffer pointed to by dataPtr has to have the correct length. 00567 // (which is guaranteed by the ArrayColumn putColumnCells function). 00568 // The default implementation throws an "invalid operation exception". 00569 // <group> 00570 virtual void putArrayColumnCellsBoolV (const RefRows& rownrs, 00571 const Array<Bool>* dataPtr); 00572 virtual void putArrayColumnCellsuCharV (const RefRows& rownrs, 00573 const Array<uChar>* dataPtr); 00574 virtual void putArrayColumnCellsShortV (const RefRows& rownrs, 00575 const Array<Short>* dataPtr); 00576 virtual void putArrayColumnCellsuShortV (const RefRows& rownrs, 00577 const Array<uShort>* dataPtr); 00578 virtual void putArrayColumnCellsIntV (const RefRows& rownrs, 00579 const Array<Int>* dataPtr); 00580 virtual void putArrayColumnCellsuIntV (const RefRows& rownrs, 00581 const Array<uInt>* dataPtr); 00582 virtual void putArrayColumnCellsfloatV (const RefRows& rownrs, 00583 const Array<float>* dataPtr); 00584 virtual void putArrayColumnCellsdoubleV (const RefRows& rownrs, 00585 const Array<double>* dataPtr); 00586 virtual void putArrayColumnCellsComplexV (const RefRows& rownrs, 00587 const Array<Complex>* dataPtr); 00588 virtual void putArrayColumnCellsDComplexV (const RefRows& rownrs, 00589 const Array<DComplex>* dataPtr); 00590 virtual void putArrayColumnCellsStringV (const RefRows& rownrs, 00591 const Array<String>* dataPtr); 00592 // </group> 00593 00594 // Get the array value in the given row. 00595 // The array pointed to by dataPtr has to have the correct length 00596 // (which is guaranteed by the ArrayColumn getSlice function). 00597 // The default implementation throws an "invalid operation exception". 00598 // <group> 00599 virtual void getSliceBoolV (uInt rownr, const Slicer& ns, 00600 Array<Bool>* dataPtr); 00601 virtual void getSliceuCharV (uInt rownr, const Slicer& ns, 00602 Array<uChar>* dataPtr); 00603 virtual void getSliceShortV (uInt rownr, const Slicer& ns, 00604 Array<Short>* dataPtr); 00605 virtual void getSliceuShortV (uInt rownr, const Slicer& ns, 00606 Array<uShort>* dataPtr); 00607 virtual void getSliceIntV (uInt rownr, const Slicer& ns, 00608 Array<Int>* dataPtr); 00609 virtual void getSliceuIntV (uInt rownr, const Slicer& ns, 00610 Array<uInt>* dataPtr); 00611 virtual void getSlicefloatV (uInt rownr, const Slicer& ns, 00612 Array<float>* dataPtr); 00613 virtual void getSlicedoubleV (uInt rownr, const Slicer& ns, 00614 Array<double>* dataPtr); 00615 virtual void getSliceComplexV (uInt rownr, const Slicer& ns, 00616 Array<Complex>* dataPtr); 00617 virtual void getSliceDComplexV (uInt rownr, const Slicer& ns, 00618 Array<DComplex>* dataPtr); 00619 virtual void getSliceStringV (uInt rownr, const Slicer& ns, 00620 Array<String>* dataPtr); 00621 // </group> 00622 00623 // Put the array value into the given row. 00624 // The buffer pointed to by dataPtr has to have the correct length 00625 // (which is guaranteed by the ArrayColumn putSlice function). 00626 // The default implementation throws an "invalid operation exception". 00627 // <group> 00628 virtual void putSliceBoolV (uInt rownr, const Slicer& ns, 00629 const Array<Bool>* dataPtr); 00630 virtual void putSliceuCharV (uInt rownr, const Slicer& ns, 00631 const Array<uChar>* dataPtr); 00632 virtual void putSliceShortV (uInt rownr, const Slicer& ns, 00633 const Array<Short>* dataPtr); 00634 virtual void putSliceuShortV (uInt rownr, const Slicer& ns, 00635 const Array<uShort>* dataPtr); 00636 virtual void putSliceIntV (uInt rownr, const Slicer& ns, 00637 const Array<Int>* dataPtr); 00638 virtual void putSliceuIntV (uInt rownr, const Slicer& ns, 00639 const Array<uInt>* dataPtr); 00640 virtual void putSlicefloatV (uInt rownr, const Slicer& ns, 00641 const Array<float>* dataPtr); 00642 virtual void putSlicedoubleV (uInt rownr, const Slicer& ns, 00643 const Array<double>* dataPtr); 00644 virtual void putSliceComplexV (uInt rownr, const Slicer& ns, 00645 const Array<Complex>* dataPtr); 00646 virtual void putSliceDComplexV (uInt rownr, const Slicer& ns, 00647 const Array<DComplex>* dataPtr); 00648 virtual void putSliceStringV (uInt rownr, const Slicer& ns, 00649 const Array<String>* dataPtr); 00650 // </group> 00651 00652 // Get the array values in the entire column. 00653 // The buffer pointed to by dataPtr has to have the correct length. 00654 // (which is guaranteed by the ArrayColumn getColumn function). 00655 // The default implementation uses the corresponding getBlockXXXV. 00656 // <group> 00657 virtual void getColumnSliceBoolV (const Slicer& ns, 00658 Array<Bool>* dataPtr); 00659 virtual void getColumnSliceuCharV (const Slicer& ns, 00660 Array<uChar>* dataPtr); 00661 virtual void getColumnSliceShortV (const Slicer& ns, 00662 Array<Short>* dataPtr); 00663 virtual void getColumnSliceuShortV (const Slicer& ns, 00664 Array<uShort>* dataPtr); 00665 virtual void getColumnSliceIntV (const Slicer& ns, 00666 Array<Int>* dataPtr); 00667 virtual void getColumnSliceuIntV (const Slicer& ns, 00668 Array<uInt>* dataPtr); 00669 virtual void getColumnSlicefloatV (const Slicer& ns, 00670 Array<float>* dataPtr); 00671 virtual void getColumnSlicedoubleV (const Slicer& ns, 00672 Array<double>* dataPtr); 00673 virtual void getColumnSliceComplexV (const Slicer& ns, 00674 Array<Complex>* dataPtr); 00675 virtual void getColumnSliceDComplexV (const Slicer& ns, 00676 Array<DComplex>* dataPtr); 00677 virtual void getColumnSliceStringV (const Slicer& ns, 00678 Array<String>* dataPtr); 00679 // </group> 00680 00681 // Put the array values into the entire column. 00682 // The buffer pointed to by dataPtr has to have the correct length. 00683 // (which is guaranteed by the ArrayColumn putColumn function). 00684 // The default implementation uses the corresponding putBlockXXXV. 00685 // <group> 00686 virtual void putColumnSliceBoolV (const Slicer& ns, 00687 const Array<Bool>* dataPtr); 00688 virtual void putColumnSliceuCharV (const Slicer& ns, 00689 const Array<uChar>* dataPtr); 00690 virtual void putColumnSliceShortV (const Slicer& ns, 00691 const Array<Short>* dataPtr); 00692 virtual void putColumnSliceuShortV (const Slicer& ns, 00693 const Array<uShort>* dataPtr); 00694 virtual void putColumnSliceIntV (const Slicer& ns, 00695 const Array<Int>* dataPtr); 00696 virtual void putColumnSliceuIntV (const Slicer& ns, 00697 const Array<uInt>* dataPtr); 00698 virtual void putColumnSlicefloatV (const Slicer& ns, 00699 const Array<float>* dataPtr); 00700 virtual void putColumnSlicedoubleV (const Slicer& ns, 00701 const Array<double>* dataPtr); 00702 virtual void putColumnSliceComplexV (const Slicer& ns, 00703 const Array<Complex>* dataPtr); 00704 virtual void putColumnSliceDComplexV (const Slicer& ns, 00705 const Array<DComplex>* dataPtr); 00706 virtual void putColumnSliceStringV (const Slicer& ns, 00707 const Array<String>* dataPtr); 00708 // </group> 00709 00710 // Get the array values in some cells of the column. 00711 // The buffer pointed to by dataPtr has to have the correct length. 00712 // (which is guaranteed by the ArrayColumn getColumnCells function). 00713 // The default implementation throws an "invalid operation exception". 00714 // <group> 00715 virtual void getColumnSliceCellsBoolV (const RefRows& rownrs, 00716 const Slicer& ns, 00717 Array<Bool>* dataPtr); 00718 virtual void getColumnSliceCellsuCharV (const RefRows& rownrs, 00719 const Slicer& ns, 00720 Array<uChar>* dataPtr); 00721 virtual void getColumnSliceCellsShortV (const RefRows& rownrs, 00722 const Slicer& ns, 00723 Array<Short>* dataPtr); 00724 virtual void getColumnSliceCellsuShortV (const RefRows& rownrs, 00725 const Slicer& ns, 00726 Array<uShort>* dataPtr); 00727 virtual void getColumnSliceCellsIntV (const RefRows& rownrs, 00728 const Slicer& ns, 00729 Array<Int>* dataPtr); 00730 virtual void getColumnSliceCellsuIntV (const RefRows& rownrs, 00731 const Slicer& ns, 00732 Array<uInt>* dataPtr); 00733 virtual void getColumnSliceCellsfloatV (const RefRows& rownrs, 00734 const Slicer& ns, 00735 Array<float>* dataPtr); 00736 virtual void getColumnSliceCellsdoubleV (const RefRows& rownrs, 00737 const Slicer& ns, 00738 Array<double>* dataPtr); 00739 virtual void getColumnSliceCellsComplexV (const RefRows& rownrs, 00740 const Slicer& ns, 00741 Array<Complex>* dataPtr); 00742 virtual void getColumnSliceCellsDComplexV (const RefRows& rownrs, 00743 const Slicer& ns, 00744 Array<DComplex>* dataPtr); 00745 virtual void getColumnSliceCellsStringV (const RefRows& rownrs, 00746 const Slicer& ns, 00747 Array<String>* dataPtr); 00748 // </group> 00749 00750 // Put the array values into some cells of the column. 00751 // The buffer pointed to by dataPtr has to have the correct length. 00752 // (which is guaranteed by the ArrayColumn putColumnSlice function). 00753 // The default implementation throws an "invalid operation exception". 00754 // <group> 00755 virtual void putColumnSliceCellsBoolV (const RefRows& rownrs, 00756 const Slicer& ns, 00757 const Array<Bool>* dataPtr); 00758 virtual void putColumnSliceCellsuCharV (const RefRows& rownrs, 00759 const Slicer& ns, 00760 const Array<uChar>* dataPtr); 00761 virtual void putColumnSliceCellsShortV (const RefRows& rownrs, 00762 const Slicer& ns, 00763 const Array<Short>* dataPtr); 00764 virtual void putColumnSliceCellsuShortV (const RefRows& rownrs, 00765 const Slicer& ns, 00766 const Array<uShort>* dataPtr); 00767 virtual void putColumnSliceCellsIntV (const RefRows& rownrs, 00768 const Slicer& ns, 00769 const Array<Int>* dataPtr); 00770 virtual void putColumnSliceCellsuIntV (const RefRows& rownrs, 00771 const Slicer& ns, 00772 const Array<uInt>* dataPtr); 00773 virtual void putColumnSliceCellsfloatV (const RefRows& rownrs, 00774 const Slicer& ns, 00775 const Array<float>* dataPtr); 00776 virtual void putColumnSliceCellsdoubleV (const RefRows& rownrs, 00777 const Slicer& ns, 00778 const Array<double>* dataPtr); 00779 virtual void putColumnSliceCellsComplexV (const RefRows& rownrs, 00780 const Slicer& ns, 00781 const Array<Complex>* dataPtr); 00782 virtual void putColumnSliceCellsDComplexV (const RefRows& rownrs, 00783 const Slicer& ns, 00784 const Array<DComplex>* dataPtr); 00785 virtual void putColumnSliceCellsStringV (const RefRows& rownrs, 00786 const Slicer& ns, 00787 const Array<String>* dataPtr); 00788 // </group> 00789 00790 00791 private: 00792 // The data type of the column. 00793 int dtype_p; 00794 }; 00795 00796 00797 00798 00799 } //# NAMESPACE CASA - END 00800 00801 #endif