vtf-logo

GridFunctionFunctors.h

Go to the documentation of this file.
00001 // -*- C++ -*-
00002 
00003 #ifndef _included_GridFunctionFunctors_h
00004 #define _included_GridFunctionFunctors_h
00005 
00011 template <class GFType, int dim>
00012 class GFBndryUpdateFunc {
00013  public:
00014   virtual ~GFBndryUpdateFunc() {}
00015   virtual void operator() (GridData<GFType,dim> &target, const int& target_level, 
00016                            const BBox &bb, const int &side, const double& phystime) = 0;
00017 };
00018 
00019 template <class TClass, class GFType, int dim>
00020 class GFBndryUpdateSpecificFunc : public GFBndryUpdateFunc<GFType,dim> {
00021  public:
00022   typedef void (TClass::*Func) (GridData<GFType,dim> &target, const int& target_level, 
00023                                 const BBox &bb, const int &side, const double& phystime);
00024 
00025   GFBndryUpdateSpecificFunc(TClass* _tcobj, Func _func) : tcobj(_tcobj), func(_func) {}
00026 
00027   virtual ~GFBndryUpdateSpecificFunc() {}
00028   virtual void operator() (GridData<GFType,dim> &target, const int& target_level, 
00029                            const BBox &bb, const int &side, const double& phystime)
00030     { (*tcobj.*func)(target, target_level, bb, side, phystime); }
00031 
00032  private:
00033   TClass* tcobj;
00034   Func func;
00035 };
00036   
00037 
00038 template <class GFType, int dim>
00039 class GFLevelTransferFunc {
00040  public:
00041   virtual ~GFLevelTransferFunc() {}
00042   virtual void operator() (GridData<GFType,dim> &source, const int& source_level, 
00043                            GridData<GFType,dim> &target, const int& target_level, const BBox &bb) = 0;
00044 };
00045 
00046 template <class TClass, class GFType, int dim>
00047 class GFLevelTransferSpecificFunc : public GFLevelTransferFunc<GFType,dim> {
00048  public:
00049   typedef void (TClass::*Func) (GridData<GFType,dim> &source, const int& source_level, 
00050                                 GridData<GFType,dim> &target, const int& target_level, const BBox &bb);
00051 
00052   GFLevelTransferSpecificFunc(TClass* _tcobj, Func _func) : tcobj(_tcobj), func(_func) {}
00053 
00054   virtual ~GFLevelTransferSpecificFunc() {}
00055   virtual void operator() (GridData<GFType,dim> &source, const int& source_level, 
00056                            GridData<GFType,dim> &target, const int& target_level, const BBox &bb)
00057     { (*tcobj.*func)(source, source_level, target, target_level, bb); }
00058 
00059  private:
00060   TClass* tcobj;
00061   Func func;
00062 };
00063   
00064   
00065 template <class GFType, int dim>
00066 class GFAdptBndryUpdateFunc {
00067  public:
00068   virtual ~GFAdptBndryUpdateFunc() {}
00069   virtual void operator() (GridData<GFType,dim> &target, GridData<GFType,dim> &source_next, const double &frac,
00070                            GridData<GFType,dim> &source_previous, const double &oneminusfrac, 
00071                            const int &target_level, const BBox &bb) = 0;
00072 };
00073 
00074 template <class TClass, class GFType, int dim>
00075 class GFAdptBndryUpdateSpecificFunc : public GFAdptBndryUpdateFunc<GFType,dim> {
00076  public:
00077   typedef void (TClass::*Func) (GridData<GFType,dim> &target, GridData<GFType,dim> &source_next, const double &frac,
00078                                 GridData<GFType,dim> &source_previous, const double &oneminusfrac, 
00079                                 const int &target_level, const BBox &bb);
00080 
00081   GFAdptBndryUpdateSpecificFunc(TClass* _tcobj, Func _func) : tcobj(_tcobj), func(_func) {}
00082 
00083   virtual ~GFAdptBndryUpdateSpecificFunc() {}
00084   virtual void operator() (GridData<GFType,dim> &target, GridData<GFType,dim> &source_next, const double &frac,
00085                            GridData<GFType,dim> &source_previous, const double &oneminusfrac, 
00086                            const int &target_level, const BBox &bb)
00087     { (*tcobj.*func)(target, source_next, frac, source_previous, oneminusfrac, target_level, bb); }
00088 
00089  private:
00090   TClass* tcobj;
00091   Func func;
00092 };
00093   
00094 
00095 template <class GFType, int dim>
00096 class GFIOFunc {
00097  public:
00098   virtual ~GFIOFunc() {}
00099   virtual void operator() (GridData<GFType,dim> &source, const int& source_level, const BBox &bb) = 0;
00100 };
00101 
00102 template <class TClass, class GFType, int dim>
00103 class GFIOSpecificFunc : public GFIOFunc<GFType,dim> {
00104  public:
00105   typedef void (TClass::*Func) (GridData<GFType,dim> &source, const int& source_level, const BBox &bb);
00106 
00107   GFIOSpecificFunc(TClass* _tcobj, Func _func) : tcobj(_tcobj), func(_func) {}
00108 
00109   virtual ~GFIOSpecificFunc() {}
00110   virtual void operator() (GridData<GFType,dim> &source, const int& source_level, const BBox &bb)
00111     { (*tcobj.*func)(source, source_level, bb); }
00112 
00113  private:
00114   TClass* tcobj;
00115   Func func;
00116 };
00117 
00118 
00119 template <class GFType, int dim>
00120 class GFRecomposeFunc {
00121  public:
00122   virtual ~GFRecomposeFunc() {}
00123   virtual void operator() (GridFunction<GFType,dim> &gf, const int& time, 
00124                            const int& level, const double& phystime) = 0;
00125 };
00126 
00127 template <class TClass, class GFType, int dim>
00128 class GFRecomposeSpecificFunc : public GFRecomposeFunc<GFType,dim> {
00129  public:
00130   typedef void (TClass::*Func) (GridFunction<GFType,dim> &gf, const int& time, 
00131                                 const int& level, const double& phystime);
00132 
00133   GFRecomposeSpecificFunc(TClass* _tcobj, Func _func) : tcobj(_tcobj), func(_func) {}
00134 
00135   virtual ~GFRecomposeSpecificFunc() {}
00136   virtual void operator() (GridFunction<GFType,dim> &gf, const int& time, 
00137                            const int& level, const double& phystime)
00138   { (*tcobj.*func)(gf, time, level, phystime); }
00139 
00140  private:
00141   TClass* tcobj;
00142   Func func;
00143 };
00144   
00145 
00146 #endif
00147 
00148 

Generated on Fri Aug 24 13:00:29 2007 for AMROC's Hierachical Data Structures - by  doxygen 1.4.7