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 #ifndef MLN_CORE_INTERNAL_IMAGE_DOMAIN_MORPHER_HH
00027 # define MLN_CORE_INTERNAL_IMAGE_DOMAIN_MORPHER_HH
00028
00032
00033 # include <mln/core/internal/image_morpher.hh>
00034
00035
00036 namespace mln
00037 {
00038
00039 namespace internal
00040 {
00041
00042
00050 template <typename I, typename S, typename E>
00051 class image_domain_morpher : public image_morpher<I, mln_value(I), S, E>
00052 {
00053 public:
00054
00056 typedef mln_rvalue(I) rvalue;
00057
00059 typedef mln_morpher_lvalue(I) lvalue;
00060
00061
00063 rvalue operator()(const mln_psite(S)& p) const;
00064
00066 lvalue operator()(const mln_psite(S)& p);
00067
00068 protected:
00069
00071 image_domain_morpher();
00072 };
00073
00074
00075 # ifndef MLN_INCLUDE_ONLY
00076
00077 template <typename I, typename S, typename E>
00078 inline
00079 image_domain_morpher<I,S,E>::image_domain_morpher()
00080 {
00081 }
00082
00083 template <typename I, typename S, typename E>
00084 inline
00085 mln_rvalue(I)
00086 image_domain_morpher<I,S,E>::operator()(const mln_psite(S)& p) const
00087 {
00088 mln_precondition(this->delegatee_() != 0);
00089 mln_precondition(exact(this)->has(p));
00090 mln_precondition(this->delegatee_()->has(p));
00091 return this->delegatee_()->operator()(p);
00092 }
00093
00094 template <typename I, typename S, typename E>
00095 inline
00096 typename image_domain_morpher<I,S,E>::lvalue
00097 image_domain_morpher<I,S,E>::operator()(const mln_psite(S)& p)
00098 {
00099 mln_precondition(this->delegatee_() != 0);
00100 mln_precondition(exact(this)->has(p));
00101 mln_precondition(this->delegatee_()->has(p));
00102 return this->delegatee_()->operator()(p);
00103 }
00104
00105 # endif // ! MLN_INCLUDE_ONLY
00106
00107 }
00108
00109 }
00110
00111
00112 #endif // ! MLN_CORE_INTERNAL_IMAGE_DOMAIN_MORPHER_HH