Go to the documentation of this file.00001
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
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
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
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
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
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
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 }
00213
00214 #endif // aglowavSpace_hh