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_ARITH_REVERT_HH
00027 # define MLN_ARITH_REVERT_HH
00028
00034
00035 # include <mln/core/concept/image.hh>
00036 # include <mln/trait/value_.hh>
00037
00038
00039 # include <mln/arith/revert.spe.hh>
00040
00041
00042
00043
00044
00045
00046 namespace mln
00047 {
00048
00049 namespace arith
00050 {
00051
00053
00063 template <typename I>
00064 mln_concrete(I) revert(const Image<I>& input);
00065
00066
00068
00077 template <typename I>
00078 void revert_inplace(Image<I>& input);
00079
00080
00081 # ifndef MLN_INCLUDE_ONLY
00082
00083 namespace impl
00084 {
00085
00086 namespace generic
00087 {
00088
00089 template <typename I, typename O>
00090 inline
00091 void revert_(const I& input, O& output)
00092 {
00093 trace::entering("arith::impl::generic::revert_");
00094
00095 typedef mln_value(I) V;
00096 mln_piter(I) p(input.domain());
00097 for_all(p)
00098 output(p) = mln_min(V) + (mln_max(V) - input(p));
00099
00100 trace::exiting("arith::impl::generic::revert_");
00101 }
00102
00103 }
00104
00105 }
00106
00107
00108
00109
00110 template <typename I>
00111 inline
00112 mln_concrete(I) revert(const Image<I>& input)
00113 {
00114 trace::entering("arith::revert");
00115
00116 mln_precondition(exact(input).is_valid());
00117
00118 mln_concrete(I) output;
00119 initialize(output, input);
00120 impl::revert_(mln_trait_image_speed(I)(), exact(input), output);
00121
00122 trace::exiting("arith::revert");
00123 return output;
00124 }
00125
00126 template <typename I>
00127 inline
00128 void revert_inplace(Image<I>& input)
00129 {
00130 trace::entering("arith::revert_inplace");
00131
00132 mln_precondition(exact(input).is_valid());
00133
00134 impl::revert_(mln_trait_image_speed(I)(), exact(input), exact(input));
00135
00136 trace::exiting("arith::revert_inplace");
00137 }
00138
00139 # endif // ! MLN_INCLUDE_ONLY
00140
00141 }
00142
00143 }
00144
00145
00146 #endif // ! MLN_ARITH_REVERT_HH