Home | Doxygen Documentation | Tutorials | Developer Tools (restricted)

aglowav/space.hh
Go to the documentation of this file.
00001 /* Spaces for the agglomerated wavelets.
00002  */
00003 
00004 #ifndef aglowavSpace_hh
00005 #define aglowavSpace_hh
00006 
00007 #ifdef __GUNG__
00008   #pragma interface
00009 #endif
00010 
00011 #include "toolbox/scannerConnectors.hh"
00012 #include "space/space.hh"
00013 #include "aglowav/element.hh"
00014 #include "aglowav/tree.hh"
00015 
00016 namespace aglowav {
00017 
00018   // ********************************************************* Haar3dDFSScan **
00019 
00024   template<class F = concepts::Real>
00025   class Haar3dDFSScan : public concepts::Scan<concepts::Element<F> > {
00026   public:
00028     virtual Haar3dXXX<F>& operator++(int) = 0;
00029   };
00030 
00031 
00032   // ********************************************************* Haar3dBFSScan **
00033 
00038   template<class F = concepts::Real>
00039   class Haar3dBFSScan : public concepts::Scan<concepts::Element<F> > {
00040   public:
00042     virtual Haar3dXXX<F>& operator++(int) = 0;
00044     virtual void skip(uint lvl) = 0;
00045   };
00046 
00047   // **************************************************************** Haar3d **
00048 
00052   template<class F = concepts::Real>
00053   class Haar3d : public concepts::Space<F> {
00054   public:
00056     virtual ~Haar3d() {}
00057 
00059     virtual uint nlvl() const = 0;
00061     virtual Haar3dDFSScan<F>* dfsscan() const = 0;
00063     virtual Haar3dBFSScan<F>* bfsscan() const = 0;
00064   };
00065 
00066   // ******************************************************* BiHaar3dDFSScan **
00067 
00072   template<class F = concepts::Real>
00073   class BiHaar3dDFSScan : public Haar3dDFSScan<F> {
00074   public:
00079     BiHaar3dDFSScan(Haar3d000<F>* elm, uint ht);
00081     BiHaar3dDFSScan(const BiHaar3dDFSScan<F>& sc);
00083     inline ~BiHaar3dDFSScan() {delete[] stk_;}
00084 
00086     Haar3d000<F>& operator++(int);
00088     inline BiHaar3dDFSScan<F>* clone() const {
00089       return new BiHaar3dDFSScan<F>(*this);
00090     }
00092     inline bool eos() const {return sptr_[0] ? 0 : 1;}
00093 
00094   private:
00096     uint ht_;
00098     Haar3d000<F>** stk_;
00100     Haar3d000<F>** sptr_;
00101   };
00102 
00103   // ******************************************************* BiHaar3dBFSScan **
00104 
00109   template<class F = concepts::Real>
00110   class BiHaar3dBFSScan : public Haar3dBFSScan<F> {
00111   public:
00116     BiHaar3dBFSScan(Haar3d000<F>* elm, uint ht);
00118     BiHaar3dBFSScan(const BiHaar3dBFSScan<F>& sc);
00120     inline ~BiHaar3dBFSScan() {delete[] stk_;}
00121 
00123     Haar3d000<F>& operator++(int);
00125     inline BiHaar3dBFSScan* clone() const {
00126       return new BiHaar3dBFSScan<F>(*this);
00127     }
00129     inline bool eos() const {return sptr_[0] ? 0 : 1;}
00131     void skip(uint lvl);
00132 
00133   private:
00135     uint ht_;
00137     Haar3d000<F>** stk_;
00139     Haar3d000<F>** sptr_;
00140   };
00141 
00142   // ************************************************************** BiHaar3d **
00143 
00148   template<class F = concepts::Real>
00149   class BiHaar3d : public Haar3d<F> {
00150   public:
00152     BiHaar3d(BiTree<BiClNode00<F> >& tree);
00154     inline ~BiHaar3d() {destructor_(elm_);}
00155 
00157     inline uint dim() const {return dim_;}
00159     inline uint nelm() const {return nelm_;}
00161     inline uint nlvl() const {return nlvl_;}
00163     inline BiHaar3dDFSScan<F>* dfsscan() const;
00165     inline BiHaar3dBFSScan<F>* bfsscan() const;
00167     inline BiHaar3dBFSScan<F>* scan() const;
00168 
00169   protected:
00171     std::ostream& info(std::ostream& os) const;
00172 
00173   private:
00175     Haar3d000<F>* constructor_(BiClNode00<F>* nd, concepts::Real* m,
00176              typename Haar3dXXX<F, 2>::Key& key);
00177 
00179     void destructor_(Haar3d000<F>* elm);
00180 
00182     uint dim_;
00184     uint nelm_;
00186     uint nlvl_;
00188     Haar3d000<F>* elm_;
00189   };
00190 
00191   template<class F>
00192   inline BiHaar3dDFSScan<F>* BiHaar3d<F>::dfsscan() const {
00193     return new BiHaar3dDFSScan<F>(elm_, nlvl_);
00194   }
00195 
00196   template<class F>
00197   inline BiHaar3dBFSScan<F>* BiHaar3d<F>::bfsscan() const {
00198     return new BiHaar3dBFSScan<F>(elm_, nlvl_);
00199   }
00200 
00201   template<class F>
00202   inline BiHaar3dBFSScan<F>* BiHaar3d<F>::scan() const {
00203     return new BiHaar3dBFSScan<F>(elm_, nlvl_);
00204   }
00205 
00206   template<class F>
00207   std::ostream& BiHaar3d<F>::info(std::ostream& os) const {
00208     os << "aglowav::BiHaar3d(dim = " << dim_ << ", nlevel = " << nlvl_;
00209     return os << ", nElement = " << nelm_ << ')';
00210   }
00211 
00212 } // namespace aglowav
00213 
00214 #endif // aglowavSpace_hh

Home | Doxygen Documentation | Tutorials | Developer Tools (restricted)