File Coverage

lib/PDL/Image2D-pp-patch2d.c
Criterion Covered Total %
statement 46 327 14.0
branch 47 940 5.0
condition n/a
subroutine n/a
pod n/a
total 93 1267 7.3


line stmt bran cond sub pod time code
1              
2             #line 453 "lib/PDL/PP.pm"
3             /*
4             * THIS FILE WAS GENERATED BY PDL::PP from lib/PDL/Image2D.pd! Do not modify!
5             */
6              
7             #define PDL_FREE_CODE(trans, destroy, comp_free_code, ntpriv_free_code) \
8             if (destroy) { \
9             comp_free_code \
10             } \
11             if ((trans)->dims_redone) { \
12             ntpriv_free_code \
13             }
14              
15             #include "EXTERN.h"
16             #include "perl.h"
17             #include "XSUB.h"
18             #include "pdl.h"
19             #include "pdlcore.h"
20             #define PDL PDL_Image2D
21             extern Core* PDL; /* Structure hold core C functions */
22             #line 23 "lib/PDL/Image2D-pp-patch2d.c"
23              
24             /* Fast Modulus with proper negative behaviour */
25              
26             #define REALMOD(a,b) {while ((a)>=(b)) (a) -= (b); while ((a)<0) (a) += (b);}
27              
28             #define X(symbol, ctype, ppsym, ...) \
29             ctype quick_select_ ## ppsym(ctype arr[], int n);
30             PDL_TYPELIST_REAL(X)
31             #undef X
32             #define EZ(x) ez ? 0 : (x)
33              
34             #line 1857 "lib/PDL/PP.pm"
35             pdl_error pdl_patch2d_readdata(pdl_trans *__privtrans) {
36             pdl_error PDL_err = {0, NULL, 0};
37             #line 38 "lib/PDL/Image2D-pp-patch2d.c"
38 3           register PDL_Indx __m_size = __privtrans->ind_sizes[0];
39 3           register PDL_Indx __n_size = __privtrans->ind_sizes[1];
40 3 50         if (!__privtrans->broadcast.incs) return PDL->make_error(PDL_EUSERERROR, "Error in patch2d:" "broadcast.incs NULL");
41             /* broadcastloop declarations */
42             int __brcloopval;
43             register PDL_Indx __tind0,__tind1; /* counters along dim */
44 3           register PDL_Indx __tnpdls = __privtrans->broadcast.npdls;
45             /* dims here are how many steps along those dims */
46 3           register PDL_Indx __tinc0_a = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,0,0);
47 3           register PDL_Indx __tinc0_bad = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,1,0);
48 3           register PDL_Indx __tinc0_b = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,2,0);
49 3           register PDL_Indx __tinc1_a = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,0,1);
50 3           register PDL_Indx __tinc1_bad = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,1,1);
51 3           register PDL_Indx __tinc1_b = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,2,1);
52             #define PDL_BROADCASTLOOP_START_patch2d_readdata PDL_BROADCASTLOOP_START( \
53             readdata, \
54             __privtrans->broadcast, \
55             __privtrans->vtable, \
56             a_datap += __offsp[0]; \
57             bad_datap += __offsp[1]; \
58             b_datap += __offsp[2]; \
59             , \
60             ( ,a_datap += __tinc1_a - __tinc0_a * __tdims0 \
61             ,bad_datap += __tinc1_bad - __tinc0_bad * __tdims0 \
62             ,b_datap += __tinc1_b - __tinc0_b * __tdims0 \
63             ), \
64             ( ,a_datap += __tinc0_a \
65             ,bad_datap += __tinc0_bad \
66             ,b_datap += __tinc0_b \
67             ) \
68             )
69             #define PDL_BROADCASTLOOP_END_patch2d_readdata PDL_BROADCASTLOOP_END( \
70             __privtrans->broadcast, \
71             a_datap -= __tinc1_a * __tdims1 + __offsp[0]; \
72             bad_datap -= __tinc1_bad * __tdims1 + __offsp[1]; \
73             b_datap -= __tinc1_b * __tdims1 + __offsp[2]; \
74             )
75 3           register PDL_Indx __inc_a_m = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,0,0)]; (void)__inc_a_m;register PDL_Indx __inc_a_n = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,0,1)]; (void)__inc_a_n;
76 3           register PDL_Indx __inc_b_m = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,2,0)]; (void)__inc_b_m;register PDL_Indx __inc_b_n = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,2,1)]; (void)__inc_b_n;
77 3           register PDL_Indx __inc_bad_m = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,1,0)]; (void)__inc_bad_m;register PDL_Indx __inc_bad_n = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,1,1)]; (void)__inc_bad_n;
78             #ifndef PDL_DECLARE_PARAMS_patch2d_1
79             #define PDL_DECLARE_PARAMS_patch2d_1(PDL_TYPE_OP,PDL_PPSYM_OP,PDL_TYPE_PARAM_bad,PDL_PPSYM_PARAM_bad) \
80             PDL_DECLARE_PARAMETER(PDL_TYPE_OP, a, (__privtrans->pdls[0]), 1, PDL_PPSYM_OP) \
81             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_bad, bad, (__privtrans->pdls[1]), 1, PDL_PPSYM_PARAM_bad) \
82             PDL_DECLARE_PARAMETER(PDL_TYPE_OP, b, (__privtrans->pdls[2]), 1, PDL_PPSYM_OP)
83             #endif
84             #define PDL_IF_BAD(t,f) f
85 3           switch (__privtrans->__datatype) { /* Start generic switch */
86 0           case PDL_SB: {
87 0 0         PDL_DECLARE_PARAMS_patch2d_1(PDL_SByte,A,PDL_Long,L)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
88             {PDL_Indx i1,j1, i2,j2, norm;
89             PDL_CLDouble tmp;
90 0 0         PDL_BROADCASTLOOP_START_patch2d_readdata
    0          
    0          
    0          
    0          
    0          
    0          
91 0 0         {/* Open n */ PDL_EXPAND2(register PDL_Indx n=0, __n_stop=(__n_size)); for(; n<__n_stop; n+=1) {{/* Open m */ PDL_EXPAND2(register PDL_Indx m=0, __m_stop=(__m_size)); for(; m<__m_stop; m+=1) {
    0          
92 0           (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))] = (a_datap)[0+(__inc_a_m*(m))+(__inc_a_n*(n))];
93 0 0         if (!(bad_datap)[0+(__inc_bad_m*(m))+(__inc_bad_n*(n))]) continue;
94 0           tmp = 0; norm=0;
95 0 0         for(j1=-1; j1<=1; j1++) {
96 0           j2 = n+j1;
97 0 0         if ( j2<0 || j2>=__privtrans->ind_sizes[1] ) continue;
    0          
98 0 0         for(i1=-1; i1<=1; i1++) {
99             /* ignore central pixel, which we know is bad */
100 0 0         if ( i1==0 && j1==0 ) continue;
    0          
101 0           i2 = m+i1;
102 0 0         if ( i2<0 || i2>=__privtrans->ind_sizes[0] || (bad_datap)[0+(__inc_bad_m*(i2))+(__inc_bad_n*(j2))] ) continue;
    0          
    0          
103 0           tmp += (a_datap)[0+(__inc_a_m*(i2))+(__inc_a_n*(j2))];
104 0           norm++;
105             } /* for: i1 */
106             } /* for: j1 */
107 0 0         if (norm>0) { /* Patch */
108 0           (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))] = tmp/norm;
109             }
110             }} /* Close n */}} /* Close m */
111 0 0         PDL_BROADCASTLOOP_END_patch2d_readdata /* broadcastloop */
    0          
112             }
113 0           } break;
114 0           case PDL_B: {
115 0 0         PDL_DECLARE_PARAMS_patch2d_1(PDL_Byte,B,PDL_Long,L)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
116             {PDL_Indx i1,j1, i2,j2, norm;
117             PDL_CLDouble tmp;
118 0 0         PDL_BROADCASTLOOP_START_patch2d_readdata
    0          
    0          
    0          
    0          
    0          
    0          
119 0 0         {/* Open n */ PDL_EXPAND2(register PDL_Indx n=0, __n_stop=(__n_size)); for(; n<__n_stop; n+=1) {{/* Open m */ PDL_EXPAND2(register PDL_Indx m=0, __m_stop=(__m_size)); for(; m<__m_stop; m+=1) {
    0          
120 0           (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))] = (a_datap)[0+(__inc_a_m*(m))+(__inc_a_n*(n))];
121 0 0         if (!(bad_datap)[0+(__inc_bad_m*(m))+(__inc_bad_n*(n))]) continue;
122 0           tmp = 0; norm=0;
123 0 0         for(j1=-1; j1<=1; j1++) {
124 0           j2 = n+j1;
125 0 0         if ( j2<0 || j2>=__privtrans->ind_sizes[1] ) continue;
    0          
126 0 0         for(i1=-1; i1<=1; i1++) {
127             /* ignore central pixel, which we know is bad */
128 0 0         if ( i1==0 && j1==0 ) continue;
    0          
129 0           i2 = m+i1;
130 0 0         if ( i2<0 || i2>=__privtrans->ind_sizes[0] || (bad_datap)[0+(__inc_bad_m*(i2))+(__inc_bad_n*(j2))] ) continue;
    0          
    0          
131 0           tmp += (a_datap)[0+(__inc_a_m*(i2))+(__inc_a_n*(j2))];
132 0           norm++;
133             } /* for: i1 */
134             } /* for: j1 */
135 0 0         if (norm>0) { /* Patch */
136 0           (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))] = tmp/norm;
137             }
138             }} /* Close n */}} /* Close m */
139 0 0         PDL_BROADCASTLOOP_END_patch2d_readdata /* broadcastloop */
    0          
140             }
141 0           } break;
142 0           case PDL_S: {
143 0 0         PDL_DECLARE_PARAMS_patch2d_1(PDL_Short,S,PDL_Long,L)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
144             {PDL_Indx i1,j1, i2,j2, norm;
145             PDL_CLDouble tmp;
146 0 0         PDL_BROADCASTLOOP_START_patch2d_readdata
    0          
    0          
    0          
    0          
    0          
    0          
147 0 0         {/* Open n */ PDL_EXPAND2(register PDL_Indx n=0, __n_stop=(__n_size)); for(; n<__n_stop; n+=1) {{/* Open m */ PDL_EXPAND2(register PDL_Indx m=0, __m_stop=(__m_size)); for(; m<__m_stop; m+=1) {
    0          
148 0           (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))] = (a_datap)[0+(__inc_a_m*(m))+(__inc_a_n*(n))];
149 0 0         if (!(bad_datap)[0+(__inc_bad_m*(m))+(__inc_bad_n*(n))]) continue;
150 0           tmp = 0; norm=0;
151 0 0         for(j1=-1; j1<=1; j1++) {
152 0           j2 = n+j1;
153 0 0         if ( j2<0 || j2>=__privtrans->ind_sizes[1] ) continue;
    0          
154 0 0         for(i1=-1; i1<=1; i1++) {
155             /* ignore central pixel, which we know is bad */
156 0 0         if ( i1==0 && j1==0 ) continue;
    0          
157 0           i2 = m+i1;
158 0 0         if ( i2<0 || i2>=__privtrans->ind_sizes[0] || (bad_datap)[0+(__inc_bad_m*(i2))+(__inc_bad_n*(j2))] ) continue;
    0          
    0          
159 0           tmp += (a_datap)[0+(__inc_a_m*(i2))+(__inc_a_n*(j2))];
160 0           norm++;
161             } /* for: i1 */
162             } /* for: j1 */
163 0 0         if (norm>0) { /* Patch */
164 0           (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))] = tmp/norm;
165             }
166             }} /* Close n */}} /* Close m */
167 0 0         PDL_BROADCASTLOOP_END_patch2d_readdata /* broadcastloop */
    0          
168             }
169 0           } break;
170 0           case PDL_US: {
171 0 0         PDL_DECLARE_PARAMS_patch2d_1(PDL_Ushort,U,PDL_Long,L)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
172             {PDL_Indx i1,j1, i2,j2, norm;
173             PDL_CLDouble tmp;
174 0 0         PDL_BROADCASTLOOP_START_patch2d_readdata
    0          
    0          
    0          
    0          
    0          
    0          
175 0 0         {/* Open n */ PDL_EXPAND2(register PDL_Indx n=0, __n_stop=(__n_size)); for(; n<__n_stop; n+=1) {{/* Open m */ PDL_EXPAND2(register PDL_Indx m=0, __m_stop=(__m_size)); for(; m<__m_stop; m+=1) {
    0          
176 0           (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))] = (a_datap)[0+(__inc_a_m*(m))+(__inc_a_n*(n))];
177 0 0         if (!(bad_datap)[0+(__inc_bad_m*(m))+(__inc_bad_n*(n))]) continue;
178 0           tmp = 0; norm=0;
179 0 0         for(j1=-1; j1<=1; j1++) {
180 0           j2 = n+j1;
181 0 0         if ( j2<0 || j2>=__privtrans->ind_sizes[1] ) continue;
    0          
182 0 0         for(i1=-1; i1<=1; i1++) {
183             /* ignore central pixel, which we know is bad */
184 0 0         if ( i1==0 && j1==0 ) continue;
    0          
185 0           i2 = m+i1;
186 0 0         if ( i2<0 || i2>=__privtrans->ind_sizes[0] || (bad_datap)[0+(__inc_bad_m*(i2))+(__inc_bad_n*(j2))] ) continue;
    0          
    0          
187 0           tmp += (a_datap)[0+(__inc_a_m*(i2))+(__inc_a_n*(j2))];
188 0           norm++;
189             } /* for: i1 */
190             } /* for: j1 */
191 0 0         if (norm>0) { /* Patch */
192 0           (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))] = tmp/norm;
193             }
194             }} /* Close n */}} /* Close m */
195 0 0         PDL_BROADCASTLOOP_END_patch2d_readdata /* broadcastloop */
    0          
196             }
197 0           } break;
198 0           case PDL_L: {
199 0 0         PDL_DECLARE_PARAMS_patch2d_1(PDL_Long,L,PDL_Long,L)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
200             {PDL_Indx i1,j1, i2,j2, norm;
201             PDL_CLDouble tmp;
202 0 0         PDL_BROADCASTLOOP_START_patch2d_readdata
    0          
    0          
    0          
    0          
    0          
    0          
203 0 0         {/* Open n */ PDL_EXPAND2(register PDL_Indx n=0, __n_stop=(__n_size)); for(; n<__n_stop; n+=1) {{/* Open m */ PDL_EXPAND2(register PDL_Indx m=0, __m_stop=(__m_size)); for(; m<__m_stop; m+=1) {
    0          
204 0           (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))] = (a_datap)[0+(__inc_a_m*(m))+(__inc_a_n*(n))];
205 0 0         if (!(bad_datap)[0+(__inc_bad_m*(m))+(__inc_bad_n*(n))]) continue;
206 0           tmp = 0; norm=0;
207 0 0         for(j1=-1; j1<=1; j1++) {
208 0           j2 = n+j1;
209 0 0         if ( j2<0 || j2>=__privtrans->ind_sizes[1] ) continue;
    0          
210 0 0         for(i1=-1; i1<=1; i1++) {
211             /* ignore central pixel, which we know is bad */
212 0 0         if ( i1==0 && j1==0 ) continue;
    0          
213 0           i2 = m+i1;
214 0 0         if ( i2<0 || i2>=__privtrans->ind_sizes[0] || (bad_datap)[0+(__inc_bad_m*(i2))+(__inc_bad_n*(j2))] ) continue;
    0          
    0          
215 0           tmp += (a_datap)[0+(__inc_a_m*(i2))+(__inc_a_n*(j2))];
216 0           norm++;
217             } /* for: i1 */
218             } /* for: j1 */
219 0 0         if (norm>0) { /* Patch */
220 0           (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))] = tmp/norm;
221             }
222             }} /* Close n */}} /* Close m */
223 0 0         PDL_BROADCASTLOOP_END_patch2d_readdata /* broadcastloop */
    0          
224             }
225 0           } break;
226 0           case PDL_UL: {
227 0 0         PDL_DECLARE_PARAMS_patch2d_1(PDL_ULong,K,PDL_Long,L)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
228             {PDL_Indx i1,j1, i2,j2, norm;
229             PDL_CLDouble tmp;
230 0 0         PDL_BROADCASTLOOP_START_patch2d_readdata
    0          
    0          
    0          
    0          
    0          
    0          
231 0 0         {/* Open n */ PDL_EXPAND2(register PDL_Indx n=0, __n_stop=(__n_size)); for(; n<__n_stop; n+=1) {{/* Open m */ PDL_EXPAND2(register PDL_Indx m=0, __m_stop=(__m_size)); for(; m<__m_stop; m+=1) {
    0          
232 0           (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))] = (a_datap)[0+(__inc_a_m*(m))+(__inc_a_n*(n))];
233 0 0         if (!(bad_datap)[0+(__inc_bad_m*(m))+(__inc_bad_n*(n))]) continue;
234 0           tmp = 0; norm=0;
235 0 0         for(j1=-1; j1<=1; j1++) {
236 0           j2 = n+j1;
237 0 0         if ( j2<0 || j2>=__privtrans->ind_sizes[1] ) continue;
    0          
238 0 0         for(i1=-1; i1<=1; i1++) {
239             /* ignore central pixel, which we know is bad */
240 0 0         if ( i1==0 && j1==0 ) continue;
    0          
241 0           i2 = m+i1;
242 0 0         if ( i2<0 || i2>=__privtrans->ind_sizes[0] || (bad_datap)[0+(__inc_bad_m*(i2))+(__inc_bad_n*(j2))] ) continue;
    0          
    0          
243 0           tmp += (a_datap)[0+(__inc_a_m*(i2))+(__inc_a_n*(j2))];
244 0           norm++;
245             } /* for: i1 */
246             } /* for: j1 */
247 0 0         if (norm>0) { /* Patch */
248 0           (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))] = tmp/norm;
249             }
250             }} /* Close n */}} /* Close m */
251 0 0         PDL_BROADCASTLOOP_END_patch2d_readdata /* broadcastloop */
    0          
252             }
253 0           } break;
254 0           case PDL_IND: {
255 0 0         PDL_DECLARE_PARAMS_patch2d_1(PDL_Indx,N,PDL_Long,L)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
256             {PDL_Indx i1,j1, i2,j2, norm;
257             PDL_CLDouble tmp;
258 0 0         PDL_BROADCASTLOOP_START_patch2d_readdata
    0          
    0          
    0          
    0          
    0          
    0          
259 0 0         {/* Open n */ PDL_EXPAND2(register PDL_Indx n=0, __n_stop=(__n_size)); for(; n<__n_stop; n+=1) {{/* Open m */ PDL_EXPAND2(register PDL_Indx m=0, __m_stop=(__m_size)); for(; m<__m_stop; m+=1) {
    0          
260 0           (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))] = (a_datap)[0+(__inc_a_m*(m))+(__inc_a_n*(n))];
261 0 0         if (!(bad_datap)[0+(__inc_bad_m*(m))+(__inc_bad_n*(n))]) continue;
262 0           tmp = 0; norm=0;
263 0 0         for(j1=-1; j1<=1; j1++) {
264 0           j2 = n+j1;
265 0 0         if ( j2<0 || j2>=__privtrans->ind_sizes[1] ) continue;
    0          
266 0 0         for(i1=-1; i1<=1; i1++) {
267             /* ignore central pixel, which we know is bad */
268 0 0         if ( i1==0 && j1==0 ) continue;
    0          
269 0           i2 = m+i1;
270 0 0         if ( i2<0 || i2>=__privtrans->ind_sizes[0] || (bad_datap)[0+(__inc_bad_m*(i2))+(__inc_bad_n*(j2))] ) continue;
    0          
    0          
271 0           tmp += (a_datap)[0+(__inc_a_m*(i2))+(__inc_a_n*(j2))];
272 0           norm++;
273             } /* for: i1 */
274             } /* for: j1 */
275 0 0         if (norm>0) { /* Patch */
276 0           (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))] = tmp/norm;
277             }
278             }} /* Close n */}} /* Close m */
279 0 0         PDL_BROADCASTLOOP_END_patch2d_readdata /* broadcastloop */
    0          
280             }
281 0           } break;
282 0           case PDL_ULL: {
283 0 0         PDL_DECLARE_PARAMS_patch2d_1(PDL_ULongLong,P,PDL_Long,L)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
284             {PDL_Indx i1,j1, i2,j2, norm;
285             PDL_CLDouble tmp;
286 0 0         PDL_BROADCASTLOOP_START_patch2d_readdata
    0          
    0          
    0          
    0          
    0          
    0          
287 0 0         {/* Open n */ PDL_EXPAND2(register PDL_Indx n=0, __n_stop=(__n_size)); for(; n<__n_stop; n+=1) {{/* Open m */ PDL_EXPAND2(register PDL_Indx m=0, __m_stop=(__m_size)); for(; m<__m_stop; m+=1) {
    0          
288 0           (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))] = (a_datap)[0+(__inc_a_m*(m))+(__inc_a_n*(n))];
289 0 0         if (!(bad_datap)[0+(__inc_bad_m*(m))+(__inc_bad_n*(n))]) continue;
290 0           tmp = 0; norm=0;
291 0 0         for(j1=-1; j1<=1; j1++) {
292 0           j2 = n+j1;
293 0 0         if ( j2<0 || j2>=__privtrans->ind_sizes[1] ) continue;
    0          
294 0 0         for(i1=-1; i1<=1; i1++) {
295             /* ignore central pixel, which we know is bad */
296 0 0         if ( i1==0 && j1==0 ) continue;
    0          
297 0           i2 = m+i1;
298 0 0         if ( i2<0 || i2>=__privtrans->ind_sizes[0] || (bad_datap)[0+(__inc_bad_m*(i2))+(__inc_bad_n*(j2))] ) continue;
    0          
    0          
299 0           tmp += (a_datap)[0+(__inc_a_m*(i2))+(__inc_a_n*(j2))];
300 0           norm++;
301             } /* for: i1 */
302             } /* for: j1 */
303 0 0         if (norm>0) { /* Patch */
304 0           (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))] = tmp/norm;
305             }
306             }} /* Close n */}} /* Close m */
307 0 0         PDL_BROADCASTLOOP_END_patch2d_readdata /* broadcastloop */
    0          
308             }
309 0           } break;
310 0           case PDL_LL: {
311 0 0         PDL_DECLARE_PARAMS_patch2d_1(PDL_LongLong,Q,PDL_Long,L)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
312             {PDL_Indx i1,j1, i2,j2, norm;
313             PDL_CLDouble tmp;
314 0 0         PDL_BROADCASTLOOP_START_patch2d_readdata
    0          
    0          
    0          
    0          
    0          
    0          
315 0 0         {/* Open n */ PDL_EXPAND2(register PDL_Indx n=0, __n_stop=(__n_size)); for(; n<__n_stop; n+=1) {{/* Open m */ PDL_EXPAND2(register PDL_Indx m=0, __m_stop=(__m_size)); for(; m<__m_stop; m+=1) {
    0          
316 0           (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))] = (a_datap)[0+(__inc_a_m*(m))+(__inc_a_n*(n))];
317 0 0         if (!(bad_datap)[0+(__inc_bad_m*(m))+(__inc_bad_n*(n))]) continue;
318 0           tmp = 0; norm=0;
319 0 0         for(j1=-1; j1<=1; j1++) {
320 0           j2 = n+j1;
321 0 0         if ( j2<0 || j2>=__privtrans->ind_sizes[1] ) continue;
    0          
322 0 0         for(i1=-1; i1<=1; i1++) {
323             /* ignore central pixel, which we know is bad */
324 0 0         if ( i1==0 && j1==0 ) continue;
    0          
325 0           i2 = m+i1;
326 0 0         if ( i2<0 || i2>=__privtrans->ind_sizes[0] || (bad_datap)[0+(__inc_bad_m*(i2))+(__inc_bad_n*(j2))] ) continue;
    0          
    0          
327 0           tmp += (a_datap)[0+(__inc_a_m*(i2))+(__inc_a_n*(j2))];
328 0           norm++;
329             } /* for: i1 */
330             } /* for: j1 */
331 0 0         if (norm>0) { /* Patch */
332 0           (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))] = tmp/norm;
333             }
334             }} /* Close n */}} /* Close m */
335 0 0         PDL_BROADCASTLOOP_END_patch2d_readdata /* broadcastloop */
    0          
336             }
337 0           } break;
338 0           case PDL_F: {
339 0 0         PDL_DECLARE_PARAMS_patch2d_1(PDL_Float,F,PDL_Long,L)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
340             {PDL_Indx i1,j1, i2,j2, norm;
341             PDL_CLDouble tmp;
342 0 0         PDL_BROADCASTLOOP_START_patch2d_readdata
    0          
    0          
    0          
    0          
    0          
    0          
343 0 0         {/* Open n */ PDL_EXPAND2(register PDL_Indx n=0, __n_stop=(__n_size)); for(; n<__n_stop; n+=1) {{/* Open m */ PDL_EXPAND2(register PDL_Indx m=0, __m_stop=(__m_size)); for(; m<__m_stop; m+=1) {
    0          
344 0           (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))] = (a_datap)[0+(__inc_a_m*(m))+(__inc_a_n*(n))];
345 0 0         if (!(bad_datap)[0+(__inc_bad_m*(m))+(__inc_bad_n*(n))]) continue;
346 0           tmp = 0; norm=0;
347 0 0         for(j1=-1; j1<=1; j1++) {
348 0           j2 = n+j1;
349 0 0         if ( j2<0 || j2>=__privtrans->ind_sizes[1] ) continue;
    0          
350 0 0         for(i1=-1; i1<=1; i1++) {
351             /* ignore central pixel, which we know is bad */
352 0 0         if ( i1==0 && j1==0 ) continue;
    0          
353 0           i2 = m+i1;
354 0 0         if ( i2<0 || i2>=__privtrans->ind_sizes[0] || (bad_datap)[0+(__inc_bad_m*(i2))+(__inc_bad_n*(j2))] ) continue;
    0          
    0          
355 0           tmp += (a_datap)[0+(__inc_a_m*(i2))+(__inc_a_n*(j2))];
356 0           norm++;
357             } /* for: i1 */
358             } /* for: j1 */
359 0 0         if (norm>0) { /* Patch */
360 0           (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))] = tmp/norm;
361             }
362             }} /* Close n */}} /* Close m */
363 0 0         PDL_BROADCASTLOOP_END_patch2d_readdata /* broadcastloop */
    0          
364             }
365 0           } break;
366 3           case PDL_D: {
367 3 50         PDL_DECLARE_PARAMS_patch2d_1(PDL_Double,D,PDL_Long,L)
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
368             {PDL_Indx i1,j1, i2,j2, norm;
369             PDL_CLDouble tmp;
370 12 50         PDL_BROADCASTLOOP_START_patch2d_readdata
    50          
    50          
    50          
    50          
    100          
    100          
371 93 100         {/* Open n */ PDL_EXPAND2(register PDL_Indx n=0, __n_stop=(__n_size)); for(; n<__n_stop; n+=1) {{/* Open m */ PDL_EXPAND2(register PDL_Indx m=0, __m_stop=(__m_size)); for(; m<__m_stop; m+=1) {
    100          
372 75           (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))] = (a_datap)[0+(__inc_a_m*(m))+(__inc_a_n*(n))];
373 75 100         if (!(bad_datap)[0+(__inc_bad_m*(m))+(__inc_bad_n*(n))]) continue;
374 19           tmp = 0; norm=0;
375 76 100         for(j1=-1; j1<=1; j1++) {
376 57           j2 = n+j1;
377 57 50         if ( j2<0 || j2>=__privtrans->ind_sizes[1] ) continue;
    50          
378 228 100         for(i1=-1; i1<=1; i1++) {
379             /* ignore central pixel, which we know is bad */
380 171 100         if ( i1==0 && j1==0 ) continue;
    100          
381 152           i2 = m+i1;
382 152 50         if ( i2<0 || i2>=__privtrans->ind_sizes[0] || (bad_datap)[0+(__inc_bad_m*(i2))+(__inc_bad_n*(j2))] ) continue;
    50          
    100          
383 72           tmp += (a_datap)[0+(__inc_a_m*(i2))+(__inc_a_n*(j2))];
384 72           norm++;
385             } /* for: i1 */
386             } /* for: j1 */
387 19 100         if (norm>0) { /* Patch */
388 17           (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))] = tmp/norm;
389             }
390             }} /* Close n */}} /* Close m */
391 3 50         PDL_BROADCASTLOOP_END_patch2d_readdata /* broadcastloop */
    50          
392             }
393 3           } break;
394 0           case PDL_LD: {
395 0 0         PDL_DECLARE_PARAMS_patch2d_1(PDL_LDouble,E,PDL_Long,L)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
396             {PDL_Indx i1,j1, i2,j2, norm;
397             PDL_CLDouble tmp;
398 0 0         PDL_BROADCASTLOOP_START_patch2d_readdata
    0          
    0          
    0          
    0          
    0          
    0          
399 0 0         {/* Open n */ PDL_EXPAND2(register PDL_Indx n=0, __n_stop=(__n_size)); for(; n<__n_stop; n+=1) {{/* Open m */ PDL_EXPAND2(register PDL_Indx m=0, __m_stop=(__m_size)); for(; m<__m_stop; m+=1) {
    0          
400 0           (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))] = (a_datap)[0+(__inc_a_m*(m))+(__inc_a_n*(n))];
401 0 0         if (!(bad_datap)[0+(__inc_bad_m*(m))+(__inc_bad_n*(n))]) continue;
402 0           tmp = 0; norm=0;
403 0 0         for(j1=-1; j1<=1; j1++) {
404 0           j2 = n+j1;
405 0 0         if ( j2<0 || j2>=__privtrans->ind_sizes[1] ) continue;
    0          
406 0 0         for(i1=-1; i1<=1; i1++) {
407             /* ignore central pixel, which we know is bad */
408 0 0         if ( i1==0 && j1==0 ) continue;
    0          
409 0           i2 = m+i1;
410 0 0         if ( i2<0 || i2>=__privtrans->ind_sizes[0] || (bad_datap)[0+(__inc_bad_m*(i2))+(__inc_bad_n*(j2))] ) continue;
    0          
    0          
411 0           tmp += (a_datap)[0+(__inc_a_m*(i2))+(__inc_a_n*(j2))];
412 0           norm++;
413             } /* for: i1 */
414             } /* for: j1 */
415 0 0         if (norm>0) { /* Patch */
416 0           (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))] = tmp/norm;
417             }
418             }} /* Close n */}} /* Close m */
419 0 0         PDL_BROADCASTLOOP_END_patch2d_readdata /* broadcastloop */
    0          
420             }
421 0           } break;
422 0           case PDL_CF: {
423 0 0         PDL_DECLARE_PARAMS_patch2d_1(PDL_CFloat,G,PDL_Long,L)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
424             {PDL_Indx i1,j1, i2,j2, norm;
425             PDL_CLDouble tmp;
426 0 0         PDL_BROADCASTLOOP_START_patch2d_readdata
    0          
    0          
    0          
    0          
    0          
    0          
427 0 0         {/* Open n */ PDL_EXPAND2(register PDL_Indx n=0, __n_stop=(__n_size)); for(; n<__n_stop; n+=1) {{/* Open m */ PDL_EXPAND2(register PDL_Indx m=0, __m_stop=(__m_size)); for(; m<__m_stop; m+=1) {
    0          
428 0           (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))] = (a_datap)[0+(__inc_a_m*(m))+(__inc_a_n*(n))];
429 0 0         if (!(bad_datap)[0+(__inc_bad_m*(m))+(__inc_bad_n*(n))]) continue;
430 0           tmp = 0; norm=0;
431 0 0         for(j1=-1; j1<=1; j1++) {
432 0           j2 = n+j1;
433 0 0         if ( j2<0 || j2>=__privtrans->ind_sizes[1] ) continue;
    0          
434 0 0         for(i1=-1; i1<=1; i1++) {
435             /* ignore central pixel, which we know is bad */
436 0 0         if ( i1==0 && j1==0 ) continue;
    0          
437 0           i2 = m+i1;
438 0 0         if ( i2<0 || i2>=__privtrans->ind_sizes[0] || (bad_datap)[0+(__inc_bad_m*(i2))+(__inc_bad_n*(j2))] ) continue;
    0          
    0          
439 0           tmp += (a_datap)[0+(__inc_a_m*(i2))+(__inc_a_n*(j2))];
440 0           norm++;
441             } /* for: i1 */
442             } /* for: j1 */
443 0 0         if (norm>0) { /* Patch */
444 0           (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))] = tmp/norm;
445             }
446             }} /* Close n */}} /* Close m */
447 0 0         PDL_BROADCASTLOOP_END_patch2d_readdata /* broadcastloop */
    0          
448             }
449 0           } break;
450 0           case PDL_CD: {
451 0 0         PDL_DECLARE_PARAMS_patch2d_1(PDL_CDouble,C,PDL_Long,L)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
452             {PDL_Indx i1,j1, i2,j2, norm;
453             PDL_CLDouble tmp;
454 0 0         PDL_BROADCASTLOOP_START_patch2d_readdata
    0          
    0          
    0          
    0          
    0          
    0          
455 0 0         {/* Open n */ PDL_EXPAND2(register PDL_Indx n=0, __n_stop=(__n_size)); for(; n<__n_stop; n+=1) {{/* Open m */ PDL_EXPAND2(register PDL_Indx m=0, __m_stop=(__m_size)); for(; m<__m_stop; m+=1) {
    0          
456 0           (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))] = (a_datap)[0+(__inc_a_m*(m))+(__inc_a_n*(n))];
457 0 0         if (!(bad_datap)[0+(__inc_bad_m*(m))+(__inc_bad_n*(n))]) continue;
458 0           tmp = 0; norm=0;
459 0 0         for(j1=-1; j1<=1; j1++) {
460 0           j2 = n+j1;
461 0 0         if ( j2<0 || j2>=__privtrans->ind_sizes[1] ) continue;
    0          
462 0 0         for(i1=-1; i1<=1; i1++) {
463             /* ignore central pixel, which we know is bad */
464 0 0         if ( i1==0 && j1==0 ) continue;
    0          
465 0           i2 = m+i1;
466 0 0         if ( i2<0 || i2>=__privtrans->ind_sizes[0] || (bad_datap)[0+(__inc_bad_m*(i2))+(__inc_bad_n*(j2))] ) continue;
    0          
    0          
467 0           tmp += (a_datap)[0+(__inc_a_m*(i2))+(__inc_a_n*(j2))];
468 0           norm++;
469             } /* for: i1 */
470             } /* for: j1 */
471 0 0         if (norm>0) { /* Patch */
472 0           (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))] = tmp/norm;
473             }
474             }} /* Close n */}} /* Close m */
475 0 0         PDL_BROADCASTLOOP_END_patch2d_readdata /* broadcastloop */
    0          
476             }
477 0           } break;
478 0           case PDL_CLD: {
479 0 0         PDL_DECLARE_PARAMS_patch2d_1(PDL_CLDouble,H,PDL_Long,L)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
480             {PDL_Indx i1,j1, i2,j2, norm;
481             PDL_CLDouble tmp;
482 0 0         PDL_BROADCASTLOOP_START_patch2d_readdata
    0          
    0          
    0          
    0          
    0          
    0          
483 0 0         {/* Open n */ PDL_EXPAND2(register PDL_Indx n=0, __n_stop=(__n_size)); for(; n<__n_stop; n+=1) {{/* Open m */ PDL_EXPAND2(register PDL_Indx m=0, __m_stop=(__m_size)); for(; m<__m_stop; m+=1) {
    0          
484 0           (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))] = (a_datap)[0+(__inc_a_m*(m))+(__inc_a_n*(n))];
485 0 0         if (!(bad_datap)[0+(__inc_bad_m*(m))+(__inc_bad_n*(n))]) continue;
486 0           tmp = 0; norm=0;
487 0 0         for(j1=-1; j1<=1; j1++) {
488 0           j2 = n+j1;
489 0 0         if ( j2<0 || j2>=__privtrans->ind_sizes[1] ) continue;
    0          
490 0 0         for(i1=-1; i1<=1; i1++) {
491             /* ignore central pixel, which we know is bad */
492 0 0         if ( i1==0 && j1==0 ) continue;
    0          
493 0           i2 = m+i1;
494 0 0         if ( i2<0 || i2>=__privtrans->ind_sizes[0] || (bad_datap)[0+(__inc_bad_m*(i2))+(__inc_bad_n*(j2))] ) continue;
    0          
    0          
495 0           tmp += (a_datap)[0+(__inc_a_m*(i2))+(__inc_a_n*(j2))];
496 0           norm++;
497             } /* for: i1 */
498             } /* for: j1 */
499 0 0         if (norm>0) { /* Patch */
500 0           (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))] = tmp/norm;
501             }
502             }} /* Close n */}} /* Close m */
503 0 0         PDL_BROADCASTLOOP_END_patch2d_readdata /* broadcastloop */
    0          
504             }
505 0           } break;
506 0           default: return PDL->make_error(PDL_EUSERERROR, "PP INTERNAL ERROR in patch2d: unhandled datatype(%d), only handles (ABSULKNPQFDEGCH)! PLEASE MAKE A BUG REPORT\n", __privtrans->__datatype);
507             }
508             #undef PDL_IF_BAD
509 3           return PDL_err;
510             }
511              
512             static pdl_datatypes pdl_patch2d_vtable_gentypes[] = { PDL_SB, PDL_B, PDL_S, PDL_US, PDL_L, PDL_UL, PDL_IND, PDL_ULL, PDL_LL, PDL_F, PDL_D, PDL_LD, PDL_CF, PDL_CD, PDL_CLD, -1 };
513             static PDL_Indx pdl_patch2d_vtable_realdims[] = { 2, 2, 2 };
514             static char *pdl_patch2d_vtable_parnames[] = { "a","bad","b" };
515             static short pdl_patch2d_vtable_parflags[] = {
516             0,
517             PDL_PARAM_ISTYPED,
518             PDL_PARAM_ISCREAT|PDL_PARAM_ISOUT|PDL_PARAM_ISWRITE
519             };
520             static pdl_datatypes pdl_patch2d_vtable_partypes[] = { -1, PDL_L, -1 };
521             static PDL_Indx pdl_patch2d_vtable_realdims_starts[] = { 0, 2, 4 };
522             static PDL_Indx pdl_patch2d_vtable_realdims_ind_ids[] = { 0, 1, 0, 1, 0, 1 };
523             static char *pdl_patch2d_vtable_indnames[] = { "m","n" };
524             pdl_transvtable pdl_patch2d_vtable = {
525             PDL_TRANS_DO_BROADCAST|PDL_TRANS_BADIGNORE, 0, pdl_patch2d_vtable_gentypes, 2, 3, NULL /*CORE21*/,
526             pdl_patch2d_vtable_realdims, pdl_patch2d_vtable_parnames,
527             pdl_patch2d_vtable_parflags, pdl_patch2d_vtable_partypes,
528             pdl_patch2d_vtable_realdims_starts, pdl_patch2d_vtable_realdims_ind_ids, 6,
529             2, pdl_patch2d_vtable_indnames,
530             NULL, pdl_patch2d_readdata, NULL,
531             NULL,
532             0,"PDL::Image2D::patch2d"
533             };
534              
535              
536 3           pdl_error pdl_run_patch2d(pdl *a,pdl *bad,pdl *b) {
537 3           pdl_error PDL_err = {0, NULL, 0};
538 3 50         if (!PDL) return (pdl_error){PDL_EFATAL, "PDL core struct is NULL, can't continue",0};
539 3           pdl_trans *__privtrans = PDL->create_trans(&pdl_patch2d_vtable);
540 3 50         if (!__privtrans) return PDL->make_error_simple(PDL_EFATAL, "Couldn't create trans");
541 3           __privtrans->pdls[0] = a;
542 3           __privtrans->pdls[1] = bad;
543 3           __privtrans->pdls[2] = b;
544 3 50         PDL_RETERROR(PDL_err, PDL->type_coerce(__privtrans));
545 3 50         PDL_RETERROR(PDL_err, PDL->make_trans_mutual(__privtrans));
546 3           return PDL_err;
547             }