27 #ifndef MLN_MAKE_RELABELFUN_HH
28 # define MLN_MAKE_RELABELFUN_HH
34 # include <mln/core/concept/function.hh>
35 # include <mln/fun/i2v/array.hh>
36 # include <mln/value/next.hh>
54 template <
typename V,
typename F>
71 template <
typename V,
typename F>
78 # ifndef MLN_INCLUDE_ONLY
80 template <
typename V,
typename F>
87 trace::entering(
"make::relabelfun");
89 const F& fv2b = exact(fv2b_);
91 unsigned nlabels_i = value::next(nlabels);
94 for (V i = 1; i < nlabels_i; ++i)
96 fi2v(i) = ++tmp_nlabels;
97 new_nlabels = tmp_nlabels;
98 trace::exiting(
"make::relabelfun");
103 template <
typename V,
typename F>
110 trace::entering(
"make::relabelfun");
112 const F& fv2v = exact(fv2v_);
114 unsigned nlabels_i = value::next(nlabels);
119 fun::i2v::array<V> fi2v(nlabels_i, mln_max(V));
122 for (V i = 1; i < nlabels_i; ++i)
124 mln_assertion(fv2v(i) <= nlabels);
125 if (new_labels(fv2v(i)) == mln_max(V))
127 new_labels(fv2v(i)) = ++tmp_nlabels;
128 fi2v(i) = tmp_nlabels;
131 fi2v(i) = new_labels(fv2v(i));
133 new_nlabels = tmp_nlabels;
134 trace::exiting(
"make::relabelfun");
138 # endif // ! MLN_INCLUDE_ONLY
145 #endif // ! MLN_MAKE_RELABELFUN_HH