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_LOGICAL_NOT_HH
00027 # define MLN_LOGICAL_NOT_HH
00028
00032
00033 # include <mln/logical/includes.hh>
00034 # include <mln/fun/v2b/lnot.hh>
00035
00036
00037 namespace mln
00038 {
00039
00040 namespace logical
00041 {
00042
00050 template <typename I>
00051 mln_concrete(I) not_(const Image<I>& input);
00052
00053
00064 template <typename I>
00065 void not_inplace(Image<I>& input);
00066
00067
00068
00069 # ifndef MLN_INCLUDE_ONLY
00070
00071 template <typename I>
00072 inline
00073 mln_concrete(I) not_(const Image<I>& input)
00074 {
00075 trace::entering("logical::not_");
00076
00077 mln_precondition(exact(input).is_valid());
00078
00079 fun::v2b::lnot<mln_value(I)> f;
00080 mln_concrete(I) output = data::transform(input, f);
00081
00082 trace::exiting("logical::not_");
00083 return output;
00084 }
00085
00086 template <typename I>
00087 inline
00088 void not_inplace(Image<I>& input)
00089 {
00090 trace::entering("logical::not_inplace");
00091
00092 mln_precondition(exact(input).is_valid());
00093
00094 fun::v2b::lnot<mln_value(I)> f;
00095 data::transform_inplace(input, f);
00096
00097 trace::exiting("logical::not_inplace");
00098 }
00099
00100 # endif // ! MLN_INCLUDE_ONLY
00101
00102 }
00103
00104 }
00105
00106
00107 #endif // ! MLN_LOGICAL_NOT_HH