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_DATA_COMPARE_HH
00027 # define MLN_DATA_COMPARE_HH
00028
00032
00033 # include <mln/core/concept/image.hh>
00034 # include <mln/fun/vv2b/eq.hh>
00035 # include <mln/fun/vv2b/le.hh>
00036 # include <mln/fun/vv2b/lt.hh>
00037 # include <mln/test/predicate.hh>
00038
00039
00040 namespace mln
00041 {
00042
00050
00051 template <typename L, typename R>
00052 bool operator == (const Image<L>& lhs, const Image<R>& rhs);
00053
00054
00062
00063 template <typename L, typename R>
00064 bool operator < (const Image<L>& lhs, const Image<R>& rhs);
00065
00066
00074
00075 template <typename L, typename R>
00076 bool operator <= (const Image<L>& lhs, const Image<R>& rhs);
00077
00078
00079
00080 # ifndef MLN_INCLUDE_ONLY
00081
00082
00083 template <typename L, typename R>
00084 inline
00085 bool operator == (const Image<L>& lhs_, const Image<R>& rhs_)
00086 {
00087 trace::entering("data::compare (==)");
00088
00089 const L& lhs = exact(lhs_);
00090 const R& rhs = exact(rhs_);
00091
00092 mln_precondition(lhs.is_valid());
00093 mln_precondition(rhs.is_valid());
00094 mln_precondition(lhs.domain() == rhs.domain());
00095
00096 typedef fun::vv2b::eq<mln_value(L), mln_value(R)> F;
00097 bool res = test::predicate(lhs_, rhs_, F());
00098
00099 trace::exiting("data::compare (==)");
00100 return res;
00101 }
00102
00103
00104 template <typename L, typename R>
00105 inline
00106 bool operator < (const Image<L>& lhs_, const Image<R>& rhs_)
00107 {
00108 trace::entering("data::compare (<)");
00109
00110 const L& lhs = exact(lhs_);
00111 const R& rhs = exact(rhs_);
00112
00113 mln_precondition(lhs.domain() == rhs.domain());
00114
00115 typedef fun::vv2b::lt<mln_value(L), mln_value(R)> F;
00116 bool res = test::predicate(lhs_, rhs_, F());
00117
00118 trace::exiting("data::compare (<)");
00119 return res;
00120 }
00121
00122
00123 template <typename L, typename R>
00124 inline
00125 bool operator <= (const Image<L>& lhs_, const Image<R>& rhs_)
00126 {
00127 trace::entering("data::compare (<=)");
00128
00129 const L& lhs = exact(lhs_);
00130 const R& rhs = exact(rhs_);
00131
00132 mln_precondition(lhs.domain() == rhs.domain());
00133
00134 typedef fun::vv2b::le<mln_value(L), mln_value(R)> F;
00135 bool res = test::predicate(lhs_, rhs_, F());
00136
00137 trace::exiting("data::compare (<=)");
00138 return res;
00139 }
00140
00141 # endif // ! MLN_INCLUDE_ONLY
00142
00143 }
00144
00145
00146 #endif // ! MLN_DATA_COMPARE_HH