casa  $Rev:20696$
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines
StManColumn.h
Go to the documentation of this file.
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