00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef IMG_ALG_FILL_HH
00022 #define IMG_ALG_FILL_HH
00023
00024 #include <ost/img/image.hh>
00025 #include <ost/img/image_state.hh>
00026 #include <ost/img/alg/module_config.hh>
00027
00028 namespace ost { namespace img { namespace alg {
00029
00030 namespace {
00031
00032 template<typename T>
00033 void set_val(T& v, Real rv, const Complex& cv);
00034
00035 template<>
00036 void set_val<Real>(Real& v, Real rv, const Complex& cv) {v=rv;}
00037
00038 template<>
00039 void set_val<Complex>(Complex& v, Real rv, const Complex& cv) {v=cv;}
00040
00041 template<typename T>
00042 void set_val(T& v, Real rv, const Complex& cv)
00043 {
00044 v=static_cast<T>(rv);
00045 }
00046
00047 struct FillFnc {
00048 FillFnc() {}
00049
00050 explicit FillFnc(Real f) {set_rval(f);}
00051 explicit FillFnc(const Complex& f) {set_cval(f);}
00052
00053 void SetFillValue(Real f) {set_rval(f);}
00054 void SetFillValue(const Complex& f) {set_cval(f);}
00055
00056 template <typename T, class D>
00057 void VisitState(ImageStateImpl<T,D>& isi) const {
00058 for(T* p = isi.Data().GetData(); p<isi.Data().GetEnd();++p) {
00059
00060
00061
00062
00063 set_val<T>(*p,r_fv_,c_fv_);
00064 }
00065 }
00066
00067 static String GetAlgorithmName() {return "Fill";}
00068
00069 private:
00070 Real r_fv_;
00071 Complex c_fv_;
00072
00073 void set_rval(Real f) {r_fv_=f; c_fv_=Val2Val<Real,Complex>(f);}
00074 void set_cval(const Complex& f) {c_fv_=f; r_fv_=Val2Val<Complex,Real>(f);}
00075 };
00076
00077 }
00078
00079 typedef ImageStateConstModIPAlgorithm<FillFnc> Fill;
00080
00081 }
00082
00083
00084
00085 }}
00086
00087
00088
00089 #endif