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
00029
00030
00031 #ifndef IMG_ALG_TRANS_HH
00032 #define IMG_ALG_TRANS_HH
00033
00034 #include <ost/img/image.hh>
00035 #include <ost/img/image_state.hh>
00036 #include <ost/img/alg/module_config.hh>
00037
00038
00039 #define IMG_ALG_TRANSCENDENTALS_BLOCK(FF,NN,SS) \
00040 struct FF { \
00041 FF() {} \
00042 ~FF() {} \
00043 template <typename T, class D> \
00044 void VisitState(ImageStateImpl<T,D>& isi) const { \
00045 const T* end = isi.Data().GetEnd(); \
00046 for(T* it = isi.Data().GetData(); it!=end; ++it) { \
00047 (*it) = SS (*it); \
00048 } \
00049 } \
00050 template <class D> \
00051 void VisitState(ImageStateImpl<Word,D>& isi) const { \
00052 const Word* end = isi.Data().GetEnd(); \
00053 for(Word* it = isi.Data().GetData(); it!=end; ++it) { \
00054 (*it) = static_cast<Word>(SS(static_cast<Real>(*it))); \
00055 } \
00056 } \
00057 static String GetAlgorithmName() {return "";} \
00058 }; \
00059 typedef ImageStateConstModIPAlgorithm<FF> NN;
00060
00061 namespace ost { namespace img { namespace alg {
00062
00063 IMG_ALG_TRANSCENDENTALS_BLOCK(CosFnc,Cos,std::cos)
00064 IMG_ALG_TRANSCENDENTALS_BLOCK(ExpFnc,Exp,std::exp)
00065 IMG_ALG_TRANSCENDENTALS_BLOCK(LogFnc,Log,std::log)
00066 IMG_ALG_TRANSCENDENTALS_BLOCK(Log10Fnc,Log10,std::log)
00067 IMG_ALG_TRANSCENDENTALS_BLOCK(SinFnc,Sin,std::sin)
00068 IMG_ALG_TRANSCENDENTALS_BLOCK(SqrtFnc,Sqrt,std::sqrt)
00069 IMG_ALG_TRANSCENDENTALS_BLOCK(TanFnc,Tan,std::tan)
00070
00071
00072 struct PowFnc {
00073 PowFnc():exp_(1.0) {}
00074 PowFnc(Real exp): exp_(exp) {}
00075
00076 template <typename T, class D>
00077 void VisitState(ImageStateImpl<T,D>& isi) const {
00078 const T* end = isi.Data().GetEnd();
00079 for(T* it = isi.Data().GetData(); it!=end; ++it) {
00080 (*it) = std::pow(*it,exp_);
00081 }
00082 }
00083 static String GetAlgorithmName() {return "";}
00084 private:
00085 Real exp_;
00086 };
00087
00088 typedef ImageStateConstModIPAlgorithm<PowFnc> Pow;
00089
00090
00091 }}}
00092
00093 #undef IMG_ALG_TRANSCENDENTALS_BLOCK
00094
00095
00096 #endif