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_ACCU_IMAGE_INIT_HH
00027 # define MLN_ACCU_IMAGE_INIT_HH
00028
00032
00033 # include <mln/core/concept/accumulator.hh>
00034 # include <mln/core/concept/image.hh>
00035
00036
00037 namespace mln
00038 {
00039
00040 namespace accu
00041 {
00042
00043 namespace image
00044 {
00045
00046 template <typename I>
00047 void
00048 init(Image<I>& input);
00049
00050
00051
00052 # ifndef MLN_INCLUDE_ONLY
00053
00054 namespace impl
00055 {
00056
00057
00058
00059 namespace generic
00060 {
00061
00062 template <typename I>
00063 void
00064 init(Image<I>& input_)
00065 {
00066 trace::entering("accu::impl::image::generic::init");
00067
00068 mlc_is_a(mln_value(I), Accumulator)::check();
00069
00070 I& input = exact(input_);
00071 mln_precondition(input.is_valid());
00072
00073 mln_piter(I) p(input.domain());
00074 for_all(p)
00075 input(p).init();
00076
00077 trace::exiting("accu::impl::image::generic::init");
00078 }
00079
00080 }
00081
00082
00083
00084
00085 template <typename I>
00086 void
00087 init_fastest(Image<I>& input_)
00088 {
00089 trace::entering("accu::impl::image::init_fastest");
00090
00091 mlc_is_a(mln_value(I), Accumulator)::check();
00092
00093 I& input = exact(input_);
00094 mln_precondition(input.is_valid());
00095
00096 mln_pixter(I) px(input);
00097 for_all(px)
00098 px.val().init();
00099
00100 trace::exiting("accu::impl::image::init_fastest");
00101 }
00102
00103 }
00104
00105
00106
00107
00108
00109 namespace internal
00110 {
00111
00112 template <typename I>
00113 void
00114 init_dispatch(trait::image::speed::any,
00115 Image<I>& input)
00116 {
00117 impl::generic::init(input);
00118 }
00119
00120 template <typename I>
00121 void
00122 init_dispatch(trait::image::speed::fastest,
00123 Image<I>& input)
00124 {
00125 impl::init_fastest(input);
00126 }
00127
00128 template <typename I>
00129 void
00130 init_dispatch(Image<I>& input)
00131 {
00132 init_dispatch(mln_trait_image_speed(I)(),
00133 input);
00134 }
00135
00136 }
00137
00138
00139
00140
00141 template <typename I>
00142 void
00143 init(Image<I>& input)
00144 {
00145 trace::entering("accu::image::init");
00146
00147 mlc_is_a(mln_value(I), Accumulator)::check();
00148
00149 mln_precondition(exact(input).is_valid());
00150 internal::init_dispatch(input);
00151
00152 trace::exiting("accu::image::init");
00153 }
00154
00155 # endif // ! MLN_INCLUDE_ONLY
00156
00157 }
00158
00159 }
00160
00161 }
00162
00163
00164 #endif // ! MLN_ACCU_IMAGE_INIT_HH