1 # definitions we don't want to make visible to the world
2 # because they're intended for use specifically by Imager.xs
4 # internal types used in Imager.xs
5 i_channel_list T_IM_CHANNEL_LIST
6 i_sample_list T_IM_SAMPLE_LIST
7 i_fsample_list T_IM_FSAMPLE_LIST
11 Imager::Internal::Hlines T_PTROBJ
13 Imager::Context T_PTROBJ
22 #############################################################################
26 $var = i_sv_off_t(aTHX_ $arg);
33 if (!SvROK($arg) || SvTYPE(SvRV($arg)) != SVt_PVAV) {
34 croak(\"$var is not an array ref\");
36 channels_av = (AV *)SvRV($arg);
37 $var.count = av_len(channels_av) + 1;
39 croak(\"$pname: no channels provided\");
41 $var.channels = malloc_temp(aTHX_ sizeof(int) * $var.count);
42 for (i = 0; i < $var.count; ++i) {
43 SV **entry = av_fetch(channels_av, i, 0);
44 $var.channels[i] = entry ? SvIV(*entry) : 0;
48 /* assumes we have an image */
49 $var.count = im->channels;
56 croak(\"$var must be a scalar or an arrayref\");
61 if (SvTYPE(SvRV($arg)) != SVt_PVAV)
62 croak(\"$var must be a scalar or an arrayref\");
63 av = (AV *)SvRV($arg);
64 $var.count = av_len(av) + 1;
66 croak(\"$pname: no samples provided in $var\");
67 s = malloc_temp(aTHX_ sizeof(i_sample_t) * $var.count);
68 for (i = 0; i < $var.count; ++i) {
69 SV **entry = av_fetch(av, i, 0);
70 s[i] = entry ? SvIV(*entry) : 0;
75 /* non-magic would be preferable here */
76 $var.samples = (const i_sample_t *)SvPVbyte($arg, $var.count);
78 croak(\"$pname: no samples provided in $var\");
84 croak(\"$var must be a scalar or an arrayref\");
89 if (SvTYPE(SvRV($arg)) != SVt_PVAV)
90 croak(\"$var must be a scalar or an arrayref\");
91 av = (AV *)SvRV($arg);
92 $var.count = av_len(av) + 1;
94 croak(\"$pname: no samples provided in $var\");
95 s = malloc_temp(aTHX_ sizeof(i_fsample_t) * $var.count);
96 for (i = 0; i < $var.count; ++i) {
97 SV **entry = av_fetch(av, i, 0);
98 s[i] = entry ? SvNV(*entry) : 0;
103 /* non-magic would be preferable here */
104 $var.samples = (const i_fsample_t *)SvPVbyte($arg, $var.count);
105 if ($var.count % sizeof(double))
106 croak(\"$pname: $var doesn't not contain a integer number of samples\");
107 $var.count /= sizeof(double);
109 croak(\"$pname: no samples provided in $var\");
114 SV* const xsub_tmp_sv = $arg;
115 SvGETMAGIC(xsub_tmp_sv);
116 if (SvROK(xsub_tmp_sv) && SvTYPE(SvRV(xsub_tmp_sv)) == SVt_PVAV){
117 AV *xsub_tmp_av = (AV*)SvRV(xsub_tmp_sv);
119 size_$var = av_len(xsub_tmp_av) + 1;
120 $var = $ntype(size_$var);
121 for (xsub_index = 0; xsub_index < size_$var; ++xsub_index) {
122 SV **sv = av_fetch(xsub_tmp_av, xsub_index, 0);
124 ${var}[xsub_index] = Sv${(my $ntt = $ntype) =~ s/Ptr$//; \(ucfirst $ntt)}(*sv, \"$pname\");
129 Perl_croak(aTHX_ \"%s: %s is not an ARRAY reference\",
130 ${$ALIAS?\q[GvNAME(CvGV(cv))]:\qq[\"$pname\"]},
135 #############################################################################
139 $arg = i_new_sv_off_t(aTHX_ $var);