26 #ifndef MLN_MORPHO_MINUS_HH
27 # define MLN_MORPHO_MINUS_HH
36 # include <mln/data/compare.hh>
37 # include <mln/logical/and_not.hh>
38 # include <mln/arith/minus.hh>
50 template <
typename I,
typename J>
51 mln_concrete(I)
minus(const Image<I>& lhs, const Image<J>& rhs);
54 # ifndef MLN_INCLUDE_ONLY
61 template <
typename I,
typename J>
63 mln_concrete(I) minus_(trait::image::kind::logic,
64 const I& lhs, const J& rhs)
71 template <
typename I,
typename J>
73 mln_concrete(I) minus_(trait::image::kind::any,
74 const I& lhs, const J& rhs)
76 return arith::minus<mln_value(I)>(lhs, rhs);
84 template <
typename I,
typename J>
89 trace::entering(
"morpho::minus");
90 mln_precondition(exact(rhs).domain() == exact(lhs).domain());
92 mln_concrete(I) output = impl::minus_(mln_trait_image_kind(I)(),
93 exact(lhs), exact(rhs));
95 trace::exiting(
"morpho::minus");
99 # endif // ! MLN_INCLUDE_ONLY
106 #endif // ! MLN_MORPHO_MINUS_HH