- if (items != 5)
- croak("Usage: i_gradgen(im, xo, yo, ival, dmeasure)");
- if (!SvROK(ST(1)) || ! SvTYPE(SvRV(ST(1))))
- croak("i_gradgen: Second argument must be an array ref");
- if (!SvROK(ST(2)) || ! SvTYPE(SvRV(ST(2))))
- croak("i_gradgen: Third argument must be an array ref");
- if (!SvROK(ST(3)) || ! SvTYPE(SvRV(ST(3))))
- croak("i_gradgen: Fourth argument must be an array ref");
- axx = (AV *)SvRV(ST(1));
- ayy = (AV *)SvRV(ST(2));
- ac = (AV *)SvRV(ST(3));
- dmeasure = (int)SvIV(ST(4));
-
- num = av_len(axx) < av_len(ayy) ? av_len(axx) : av_len(ayy);
- num = num <= av_len(ac) ? num : av_len(ac);
- num++;
- if (num < 2) croak("Usage: i_gradgen array refs must have more than 1 entry each");
- xo = mymalloc( sizeof(i_img_dim) * num );
- yo = mymalloc( sizeof(i_img_dim) * num );
- ival = mymalloc( sizeof(i_color) * num );
- for(i = 0; i<num; i++) {
- xo[i] = (i_img_dim)SvIV(* av_fetch(axx, i, 0));
- yo[i] = (i_img_dim)SvIV(* av_fetch(ayy, i, 0));
- sv = *av_fetch(ac, i, 0);
- if ( !sv_derived_from(sv, "Imager::Color") ) {
- free(axx); free(ayy); free(ac);
- croak("i_gradgen: Element of fourth argument is not derived from Imager::Color");
- }
- ival[i] = *INT2PTR(i_color *, SvIV((SV *)SvRV(sv)));
- }
- i_gradgen(im, num, xo, yo, ival, dmeasure);
- myfree(xo);
- myfree(yo);
- myfree(ival);
+ if (size_xo != size_yo || size_xo != size_ac)
+ croak("i_gradgen: x, y and color arrays must be the same size");
+ if (size_xo < 2)
+ croak("Usage: i_gradgen array refs must have more than 1 entry each");
+ i_gradgen(im, size_xo, xo, yo, ac, dmeasure);