ArrayColumnFunc.h
Go to the documentation of this file.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_ARRAYCOLUMNFUNC_H
00029 #define TABLES_ARRAYCOLUMNFUNC_H
00030 
00031 
00032 #include <casacore/casa/aips.h>
00033 #include <casacore/tables/Tables/ArrayColumn.h>
00034 #include <casacore/casa/Arrays/Slicer.h>
00035 #include <casacore/casa/Arrays/Array.h>
00036 
00037 namespace casacore { 
00038 
00039   
00040   
00041   
00042   
00043   
00044   
00045   template<typename T>
00046   class BaseSlicesFunctor
00047   {
00048   public:
00049     virtual ~BaseSlicesFunctor()
00050     {}
00051     virtual void apply (const Slicer& slicer, Array<T>& arr) = 0;
00052   };
00053 
00054   
00055   template<typename T>
00056   class GetCellSlices : public BaseSlicesFunctor<T>
00057   {
00058   public:
00059     GetCellSlices (const ArrayColumn<T>& col, uInt rownr)
00060       : itsCol(col), itsRow(rownr)
00061     {}
00062     virtual void apply (const Slicer& slicer, Array<T>& arr)
00063       { itsCol.getSlice (itsRow, slicer, arr); }
00064   private:
00065     const ArrayColumn<T>& itsCol;
00066     uInt                  itsRow;
00067   };
00068 
00069   
00070   template<typename T>
00071   class GetColumnSlices : public BaseSlicesFunctor<T>
00072   {
00073   public:
00074     GetColumnSlices (const ArrayColumn<T>& col)
00075       : itsCol(col)
00076     {}
00077     virtual void apply (const Slicer& slicer, Array<T>& arr)
00078       { itsCol.getColumn (slicer, arr); }
00079   private:
00080     const ArrayColumn<T>& itsCol;
00081   };
00082 
00083   
00084   template<typename T>
00085   class PutCellSlices : public BaseSlicesFunctor<T>
00086   {
00087   public:
00088     PutCellSlices (ArrayColumn<T>& col, uInt rownr)
00089       : itsCol(col), itsRow(rownr)
00090     {}
00091     virtual void apply (const Slicer& slicer, Array<T>& arr)
00092       { itsCol.putSlice (itsRow, slicer, arr); }
00093   private:
00094     ArrayColumn<T>& itsCol;
00095     uInt            itsRow;
00096   };
00097 
00098   
00099   template<typename T>
00100   class PutColumnSlices : public BaseSlicesFunctor<T>
00101   {
00102   public:
00103     PutColumnSlices (ArrayColumn<T>& col)
00104       : itsCol(col)
00105     {}
00106     virtual void apply (const Slicer& slicer, Array<T>& arr)
00107       { itsCol.putColumn (slicer, arr); }
00108   private:
00109     ArrayColumn<T>& itsCol;
00110   };
00111 
00112 } 
00113 
00114 #endif