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_PW_VALUE_HH
00027 # define MLN_PW_VALUE_HH
00028
00032
00033 # include <mln/fun/internal/selector.hh>
00034 # include <mln/core/concept/image.hh>
00035
00036
00037
00038 namespace mln
00039 {
00040
00041 namespace pw
00042 {
00043
00044
00045
00046
00047 template <typename I>
00048 struct value_
00049 : fun::internal::selector_from_result_< mln_value(I), value_<I> >::ret
00050 {
00051 typedef mln_value(I) result;
00052
00053 value_();
00054 value_(const I& ima);
00055
00056 mln_rvalue(I) operator()(const mln_psite(I)& p) const;
00057
00058 protected:
00059 const I* ima_;
00060 };
00061
00062
00063
00064
00065
00066 template <typename I>
00067 value_<I> value(const Image<I>& ima);
00068
00069
00070
00071 # ifndef MLN_INCLUDE_ONLY
00072
00073
00074
00075 template <typename I>
00076 inline
00077 value_<I>::value_()
00078 : ima_(0)
00079 {
00080 }
00081
00082 template <typename I>
00083 inline
00084 value_<I>::value_(const I& ima)
00085 : ima_(&ima)
00086 {
00087 }
00088
00089 template <typename I>
00090 inline
00091 mln_rvalue(I)
00092 value_<I>::operator()(const mln_psite(I)& p) const
00093 {
00094 mln_precondition(ima_ != 0);
00095 mln_precondition(ima_->has(p));
00096 return (*ima_)(p);
00097 }
00098
00099
00100
00101
00102 template <typename I>
00103 inline
00104 value_<I>
00105 value(const Image<I>& ima)
00106 {
00107 mln_precondition(exact(ima).is_valid());
00108 value_<I> tmp(exact(ima));
00109 return tmp;
00110 }
00111
00112 # endif // ! MLN_INCLUDE_ONLY
00113
00114 }
00115
00116 }
00117
00118
00119 #endif // ! MLN_PW_VALUE_HH