
Matthieu Garrigues a écrit :
URL: https://svn.lrde.epita.fr/svn/oln/trunk/milena
ChangeLog: 2008-01-04 Matthieu Garrigues <garrigues@lrde.epita.fr>
Fix convertions between the 4 graylevels types.
s/convertion/conversion/ À changer partout (BTW, c'est le même mot en anglais et en français). :) Ne pas hésiter à utiliser sed ou perl pour changer tout d'un bloc (sauf dans ChangeLog, of course).
* mln/value/graylevel.hh, * mln/value/graylevel_f.hh, * mln/value/internal/gray_.hh, * mln/value/internal/gray_f.hh: All these convertion now work: gray_f -> gray_<n>, gray_f -> graylevel<n>, gray_f -> graylevel_f, gray_<n> -> gray_f, gray_<n> -> graylevel<n>, gray_<n> -> graylevel_f, graylevel_f -> gray_f, graylevel_f -> graylevel<n>, graylevel_<n> -> gray_<n>, graylevel_<n> -> graylevel_f<n>.
Ok. Mais normalement, les indications dans les entrées de ChangeLog commencent par des phrases à l'impératif.
* tests/value/graylevel.cc: Add more tests for convertions.
--- mln/value/graylevel.hh | 84 +++++++++------------------ mln/value/graylevel_f.hh | 96 ++++++++++++++++--------------- mln/value/internal/gray_.hh | 15 ---- mln/value/internal/gray_f.hh | 130 +++++++++++++++++++++++++++++++------------ tests/value/graylevel.cc | 41 ++++++++++--- 5 files changed, 206 insertions(+), 160 deletions(-)
Index: trunk/milena/tests/value/graylevel.cc =================================================================== --- trunk/milena/tests/value/graylevel.cc (revision 1629) +++ trunk/milena/tests/value/graylevel.cc (revision 1630) @@ -56,10 +56,17 @@ // }
+#define test_convertion(T1, T2, VAL) \ +{ \ + T1(T2(VAL)); \ + T1 test = T2(VAL); \ + test = T2(VAL); \ +}
Il vaut mieux encapsuler ça dans un do while : #define test_convertion(T1, T2, VAL) \ do \ { \ T1(T2(VAL)); \ T1 test = T2(VAL); \ test = T2(VAL); \ } \ while (0) Ça permet à la fois de - constituer un bloc d'instructions, - de faire que la macro soit considérée comme une instruction (qui peut donc licitement se terminer par un point-virgule. (Je me trompe peut-être, mais j'imagine que les utilisations du type test_convertion(...); doivent déclencher des warnings.)
int main() { using namespace mln::value; + using namespace mln::value::internal;
Hum, c'est suspect. Quels sont les individus de internal:: qui sont utilisés ici ? [...]
Index: trunk/milena/mln/value/graylevel.hh =================================================================== --- trunk/milena/mln/value/graylevel.hh (revision 1629) +++ trunk/milena/mln/value/graylevel.hh (revision 1630) @@ -102,8 +102,6 @@ struct set_precise_binary_< op::div, mln::value::graylevel<n>, mln::value::graylevel<m> > { typedef mln::value::internal::gray_f ret; - // FIXME : Was... - //typedef mln::value::internal::gray_< mlc_max_int(m, n) > ret; };
template < unsigned n, typename I > @@ -151,8 +149,6 @@ template < unsigned n, typename S > struct set_precise_binary_< op::div, mln::value::graylevel<n>, mln::value::scalar_<S> > { - // typedef mln_trait_op_times(mln::value::graylevel<n>, - // mln::value::scalar_<S>) ret; typedef mln::value::internal::gray_f ret; };
@@ -201,49 +197,61 @@ //
// |--------------------------------------------| - // | + || gl | glf |gray_i | int | float | + // | + || gl | glf |gray_n | int | float | // |============================================| - // |gl ||gray_i|gray_f |gray_i | X | X | + // |gl ||gray_n|gray_f |gray_n | X | X | // |--------------------------------------------| // |glf || |gray_f |gray_f | X | X | // |--------------------------------------------| - // |gray|| |gray_i | X | X | + // |gray|| |gray_n | X | X | // |--------------------------------------------|
// |--------------------------------------------| - // | - || gl | glf |gray_i | int | float | + // | - || gl | glf |gray_n | int | float | // |============================================| - // |gl ||gray_i|gray_f |gray_i | X | X | + // |gl ||gray_n|gray_f |gray_n | X | X | // |--------------------------------------------| // |glf || |gray_f |gray_f | X | X | // |--------------------------------------------| - // |gray|| |gray_i | X | X | + // |gray|| |gray_n | X | X | // |--------------------------------------------|
// |--------------------------------------------| - // | * || gl | glf |gray_i | int | float | + // | * || gl | glf |gray_n | int | float | // |============================================| - // |gl ||gray_i|gray_f |gray_i |gray_i |gray_f | + // |gl ||gray_n|gray_f |gray_n |gray_n |gray_f | // |--------------------------------------------| // |glf || |gray_f |gray_f |gray_f |gray_f | // |--------------------------------------------| - // |gray|| |gray_i |gray_i |gray_f | + // |gray|| |gray_n |gray_n |gray_f | // |--------------------------------------------|
// |--------------------------------------------| - // | / || gl | glf |gray_i | int | float | + // | / || gl | glf |gray_n | int | float | // |============================================| - // |gl ||gray_i|gray_f |gray_i |gray_i |gray_i | + // |gl ||gray_f|gray_f |gray_n |gray_f |gray_f | // |--------------------------------------------| // |glf || |gray_f |gray_f |gray_f |gray_f | // |--------------------------------------------| - // |gray|| |gray_i |gray_i |gray_f | + // |gray|| |gray_f |gray_f |gray_f | // |--------------------------------------------|
- /// Valid convertions : - // glf -> gl (round) - // gl -> gray_i - // gray_i-> gl +// Valid Convertions are : + +// gray_f -> gray_<n> +// gray_f -> graylevel<n> +// gray_f -> graylevel_f + +// gray_<n> -> gray_f +// gray_<n> -> graylevel<n> +// gray_<n> -> graylevel_f + +// graylevel_f -> gray_f +// graylevel_f -> graylevel<n> + +// graylevel_<n> -> gray_<n> +// graylevel_<n> -> graylevel_f<n>
C'est cool ces informations ! Il faudra qu'on les fasse apparaitre dans la documentation. [...]
Index: trunk/milena/mln/value/graylevel_f.hh =================================================================== --- trunk/milena/mln/value/graylevel_f.hh (revision 1629) +++ trunk/milena/mln/value/graylevel_f.hh (revision 1630)
[...]
@@ -266,34 +252,42 @@ mln_trait_op_plus_(graylevel_f, graylevel_f) operator+(const graylevel_f& lhs, const graylevel_f& rhs);
- // graylevel_f + Integer<I> (doesn't compile) - template <typename I> - graylevel_f - operator+(const graylevel_f& lhs, const Integer<I>& i);
- // graylevel_f + Floating<I> (doesn't compile) - template <typename I> - graylevel_f - operator+(const graylevel_f& lhs, const Floating<I>& i); + // graylevel_f + graylevel<n> + template <unsigned n> + mln_trait_op_plus(graylevel_f, graylevel<n>) + operator+(const graylevel_f& lhs, const graylevel<n>& rhs); + // graylevel<n> + graylevel_f + template <unsigned n> + mln_trait_op_plus(graylevel_f, graylevel<n>) + operator+(const graylevel<n>& lhs, const graylevel_f& rhs);
Attention aux indentations. C'est peut-être Emacs qui est fautif ici. Je crois que la version 22 se comporte beaucoup mieux à ce sujet. S'il n'est pas installé sur ta (vos) machine(s), dites-le, on fera la mise à jour.
// graylevel_f - graylevel_f mln_trait_op_minus_(graylevel_f, graylevel_f) operator-(const graylevel_f& lhs, const graylevel_f& rhs);
- // graylevel_f - Integer<I> (doesn't compile) - template <typename I> - graylevel_f - operator-(const graylevel_f& lhs, const Integer<I>& i); - - // graylevel_f - Floating<I> (doesn't compile) - template <typename I> - graylevel_f - operator-(const graylevel_f& lhs, const Floating<I>& i); - // graylevel_f * graylevel_f mln_trait_op_times_(graylevel_f, graylevel_f) operator*(const graylevel_f& lhs, const graylevel_f& rhs);
+ + // With Builtins
Terminer avec un `.'. [...]
Index: trunk/milena/mln/value/internal/gray_f.hh =================================================================== --- trunk/milena/mln/value/internal/gray_f.hh (revision 1629) +++ trunk/milena/mln/value/internal/gray_f.hh (revision 1630)
[...]
@@ -94,7 +97,7 @@ // Nessecary??
S/Nessecary/Necessary/.