From: Tony Cook Date: Tue, 21 May 2013 11:01:15 +0000 (+1000) Subject: [rt #69243] use the AV* typemap for i_matrix_transform() X-Git-Tag: v0.96_01~16^2~24 X-Git-Url: http://git.imager.perl.org/imager.git/commitdiff_plain/87b3f212bfb2158f50f8a707588d0a5aae51b26c [rt #69243] use the AV* typemap for i_matrix_transform() --- diff --git a/Changes b/Changes index d38e842c..75a70e51 100644 --- a/Changes +++ b/Changes @@ -17,8 +17,8 @@ Imager release history. Older releases can be found in Changes.old - Imager::Color's rgba() method now returns it's values as integers instead of floating point. (IV instead of NV). - - The XS for i_poly_aa() and i_poly_aa_cfill() now use the AV * - typemap instead of rolling their own. + - The XS for i_poly_aa(), i_poly_aa_cfill() and i_matrix_transform() + now use the AV * typemap instead of rolling their own. https://rt.cpan.org/Ticket/Display.html?id=69243 (partial) Imager 0.96 - 19 May 2013 diff --git a/Imager.xs b/Imager.xs index bd322b3b..a54fad3e 100644 --- a/Imager.xs +++ b/Imager.xs @@ -1981,27 +1981,24 @@ i_rotate_exact(im, amount, ...) RETVAL Imager::ImgRaw -i_matrix_transform(im, xsize, ysize, matrix, ...) +i_matrix_transform(im, xsize, ysize, matrix_av, ...) Imager::ImgRaw im i_img_dim xsize i_img_dim ysize + AV *matrix_av PREINIT: double matrix[9]; - AV *av; - IV len; + STRLEN len; SV *sv1; int i; i_color *backp = NULL; i_fcolor *fbackp = NULL; CODE: - if (!SvROK(ST(3)) || SvTYPE(SvRV(ST(3))) != SVt_PVAV) - croak("i_matrix_transform: parameter 4 must be an array ref\n"); - av=(AV*)SvRV(ST(3)); - len=av_len(av)+1; + len=av_len(matrix_av)+1; if (len > 9) len = 9; for (i = 0; i < len; ++i) { - sv1=(*(av_fetch(av,i,0))); + sv1=(*(av_fetch(matrix_av,i,0))); matrix[i] = SvNV(sv1); } for (; i < 9; ++i)