File Coverage

lib/PDL/Image2D-pp-med2d.c
Criterion Covered Total %
statement 98 1397 7.0
branch 96 2150 4.4
condition n/a
subroutine n/a
pod n/a
total 194 3547 5.4


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-med2d.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 745 0         PDL_TYPELIST_FLOATREAL(PDL_QSORT)
  0 0          
  745 0          
    0          
    0          
    0          
    100          
    100          
    100          
    100          
    100          
    100          
33              
34              
35             #line 1846 "lib/PDL/PP.pm"
36             typedef struct pdl_params_med2d {
37             #line 38 "lib/PDL/Image2D-pp-med2d.c"
38             int opt;
39             } pdl_params_med2d;
40              
41              
42             #line 1857 "lib/PDL/PP.pm"
43             pdl_error pdl_med2d_redodims(pdl_trans *__privtrans) {
44             pdl_error PDL_err = {0, NULL, 0};
45             #line 46 "lib/PDL/Image2D-pp-med2d.c"
46 2           pdl_params_med2d *__params = __privtrans->params; (void)__params;
47 2           __privtrans->ind_sizes[0] = __privtrans->ind_sizes[4] + __privtrans->ind_sizes[2];
48 2           __privtrans->ind_sizes[1] = __privtrans->ind_sizes[6] + __privtrans->ind_sizes[3];
49 2           __privtrans->ind_sizes[5] = __privtrans->ind_sizes[4]*__privtrans->ind_sizes[6];
50 2 50         PDL_RETERROR(PDL_err, PDL->redodims_default(__privtrans));
51 2           return PDL_err;
52             }
53              
54              
55             #line 1857 "lib/PDL/PP.pm"
56             pdl_error pdl_med2d_readdata(pdl_trans *__privtrans) {
57             pdl_error PDL_err = {0, NULL, 0};
58             #line 59 "lib/PDL/Image2D-pp-med2d.c"
59 2           pdl_params_med2d *__params = __privtrans->params; (void)__params;
60 2           register PDL_Indx __m_size = __privtrans->ind_sizes[2];
61 2           register PDL_Indx __n_size = __privtrans->ind_sizes[3];
62 2           register PDL_Indx __p_size = __privtrans->ind_sizes[4];
63 2           register PDL_Indx __q_size = __privtrans->ind_sizes[6];
64 2 50         if (!__privtrans->broadcast.incs) return PDL->make_error(PDL_EUSERERROR, "Error in med2d:" "broadcast.incs NULL");
65             /* broadcastloop declarations */
66             int __brcloopval;
67             register PDL_Indx __tind0,__tind1; /* counters along dim */
68 2           register PDL_Indx __tnpdls = __privtrans->broadcast.npdls;
69             /* dims here are how many steps along those dims */
70 2           register PDL_Indx __tinc0_a = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,0,0);
71 2           register PDL_Indx __tinc0_kern = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,1,0);
72 2           register PDL_Indx __tinc0_b = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,2,0);
73 2           register PDL_Indx __tinc0_tmp = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,3,0);
74 2           register PDL_Indx __tinc0_mapi = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,4,0);
75 2           register PDL_Indx __tinc0_mapj = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,5,0);
76 2           register PDL_Indx __tinc1_a = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,0,1);
77 2           register PDL_Indx __tinc1_kern = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,1,1);
78 2           register PDL_Indx __tinc1_b = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,2,1);
79 2           register PDL_Indx __tinc1_tmp = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,3,1);
80 2           register PDL_Indx __tinc1_mapi = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,4,1);
81 2           register PDL_Indx __tinc1_mapj = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,5,1);
82             #define PDL_BROADCASTLOOP_START_med2d_readdata PDL_BROADCASTLOOP_START( \
83             readdata, \
84             __privtrans->broadcast, \
85             __privtrans->vtable, \
86             a_datap += __offsp[0]; \
87             kern_datap += __offsp[1]; \
88             b_datap += __offsp[2]; \
89             tmp_datap += __offsp[3]; \
90             mapi_datap += __offsp[4]; \
91             mapj_datap += __offsp[5]; \
92             , \
93             ( ,a_datap += __tinc1_a - __tinc0_a * __tdims0 \
94             ,kern_datap += __tinc1_kern - __tinc0_kern * __tdims0 \
95             ,b_datap += __tinc1_b - __tinc0_b * __tdims0 \
96             ,tmp_datap += __tinc1_tmp - __tinc0_tmp * __tdims0 \
97             ,mapi_datap += __tinc1_mapi - __tinc0_mapi * __tdims0 \
98             ,mapj_datap += __tinc1_mapj - __tinc0_mapj * __tdims0 \
99             ), \
100             ( ,a_datap += __tinc0_a \
101             ,kern_datap += __tinc0_kern \
102             ,b_datap += __tinc0_b \
103             ,tmp_datap += __tinc0_tmp \
104             ,mapi_datap += __tinc0_mapi \
105             ,mapj_datap += __tinc0_mapj \
106             ) \
107             )
108             #define PDL_BROADCASTLOOP_END_med2d_readdata PDL_BROADCASTLOOP_END( \
109             __privtrans->broadcast, \
110             a_datap -= __tinc1_a * __tdims1 + __offsp[0]; \
111             kern_datap -= __tinc1_kern * __tdims1 + __offsp[1]; \
112             b_datap -= __tinc1_b * __tdims1 + __offsp[2]; \
113             tmp_datap -= __tinc1_tmp * __tdims1 + __offsp[3]; \
114             mapi_datap -= __tinc1_mapi * __tdims1 + __offsp[4]; \
115             mapj_datap -= __tinc1_mapj * __tdims1 + __offsp[5]; \
116             )
117 2           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;
118 2           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;
119 2           register PDL_Indx __inc_kern_p = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,1,0)]; (void)__inc_kern_p;register PDL_Indx __inc_kern_q = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,1,1)]; (void)__inc_kern_q;
120 2           register PDL_Indx __inc_mapi_isize = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,4,0)]; (void)__inc_mapi_isize;
121 2           register PDL_Indx __inc_mapj_jsize = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,5,0)]; (void)__inc_mapj_jsize;
122 2           register PDL_Indx __inc_tmp_pq = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,3,0)]; (void)__inc_tmp_pq;
123             #ifndef PDL_DECLARE_PARAMS_med2d_1
124             #define PDL_DECLARE_PARAMS_med2d_1(PDL_TYPE_OP,PDL_PPSYM_OP,PDL_TYPE_PARAM_tmp,PDL_PPSYM_PARAM_tmp,PDL_TYPE_PARAM_mapi,PDL_PPSYM_PARAM_mapi,PDL_TYPE_PARAM_mapj,PDL_PPSYM_PARAM_mapj) \
125             PDL_DECLARE_PARAMETER_BADVAL(PDL_TYPE_OP, a, (__privtrans->pdls[0]), 1, PDL_PPSYM_OP) \
126             PDL_DECLARE_PARAMETER_BADVAL(PDL_TYPE_OP, kern, (__privtrans->pdls[1]), 1, PDL_PPSYM_OP) \
127             PDL_DECLARE_PARAMETER_BADVAL(PDL_TYPE_OP, b, (__privtrans->pdls[2]), 1, PDL_PPSYM_OP) \
128             PDL_DECLARE_PARAMETER_BADVAL(PDL_TYPE_PARAM_tmp, tmp, (__privtrans->pdls[3]), 1, PDL_PPSYM_PARAM_tmp) \
129             PDL_DECLARE_PARAMETER_BADVAL(PDL_TYPE_PARAM_mapi, mapi, (__privtrans->pdls[4]), 1, PDL_PPSYM_PARAM_mapi) \
130             PDL_DECLARE_PARAMETER_BADVAL(PDL_TYPE_PARAM_mapj, mapj, (__privtrans->pdls[5]), 1, PDL_PPSYM_PARAM_mapj)
131             #endif
132 2 100         if ( __privtrans->bvalflag ) { /* ** do 'bad' Code ** */
133             #define PDL_BAD_CODE
134             #define PDL_IF_BAD(t,f) t
135 1           switch (__privtrans->__datatype) { /* Start generic switch */
136 0           case PDL_SB: {
137 0 0         PDL_DECLARE_PARAMS_med2d_1(PDL_SByte,A,PDL_Double,D,PDL_Indx,N,PDL_Indx,N)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
138 0           {int i,j, i2,j2, poff, qoff;int opt = __params->opt;
139 0           int m_size = __privtrans->ind_sizes[2];
140 0           int n_size = __privtrans->ind_sizes[3];
141 0           int p_size = __privtrans->ind_sizes[4];
142 0           int q_size = __privtrans->ind_sizes[6];
143            
144 0           PDL_Indx *mapi = mapi_datap, *mapj = mapj_datap;
145 0 0         if ((mapi==NULL) || (mapj==NULL)) return PDL->make_error(PDL_EUSERERROR, "Error in med2d:" "Out of Memory");
    0          
146              
147 0           poff = p_size/2; mapi += p_size-1;
148 0           qoff = q_size/2; mapj += q_size-1;
149 0 0         for ( i = 1-p_size; i< m_size; i++) {
150 0           i2 = i + poff;
151 0           switch (opt) {
152 0           case 1: /* REFLECT */
153 0 0         if (i2<0)
154 0           i2 = -i2-1;
155 0 0         else if (i2 >= m_size)
156 0           i2 = 2*m_size-(i2+1);
157 0           break;
158 0           case 2: /* TRUNCATE */
159 0 0         if (i2<0 || i2 >= m_size)
    0          
160 0           i2 = -1;
161 0           break;
162 0           case 3: /* REPLICATE */
163 0 0         if (i2<0)
164 0           i2 = 0;
165 0 0         if (i2 >= m_size)
166 0           i2 = m_size-1;
167 0           break;
168 0           default:
169 0 0         REALMOD(i2,m_size);
    0          
170             }
171 0           mapi[i] = i2;
172             }
173 0 0         for ( j = 1-q_size; j< n_size; j++) {
174 0           j2 = j + qoff;
175 0           switch (opt) {
176 0           case 1: /* REFLECT */
177 0 0         if (j2<0)
178 0           j2 = -j2-1;
179 0 0         else if (j2 >= n_size)
180 0           j2 = 2*n_size-(j2+1);
181 0           break;
182 0           case 2: /* TRUNCATE */
183 0 0         if (j2<0 || j2 >= n_size)
    0          
184 0           j2 = -1;
185 0           break;
186 0           case 3: /* REPLICATE */
187 0 0         if (j2<0)
188 0           j2 = 0;
189 0 0         if (j2 >= n_size)
190 0           j2 = n_size-1;
191 0           break;
192 0           default:
193 0 0         REALMOD(j2,n_size);
    0          
194             }
195 0           mapj[j] = j2;
196             }
197              
198             #line 331 "lib/PDL/Image2D.pd"
199             PDL_BROADCASTLOOP_START_med2d_readdata
200             #line 332 "lib/PDL/Image2D.pd"
201             {/* 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) {
202             #line 333 "lib/PDL/Image2D.pd"
203             PDL_Indx count = 0;
204             PDL_IF_BAD(int flag = 0;,)
205             {/* Open q */ PDL_EXPAND2(register PDL_Indx q=0, __q_stop=(__q_size)); for(; q<__q_stop; q+=1) {
206             #line 336 "lib/PDL/Image2D.pd"
207             j2 = mapj[n-q];
208             if (j2 >= 0)
209             {/* Open p */ PDL_EXPAND2(register PDL_Indx p=0, __p_stop=(__p_size)); for(; p<__p_stop; p+=1) {
210             #line 339 "lib/PDL/Image2D.pd"
211             i2 = mapi[m-p];
212             if (i2 >= 0) {
213             PDL_LDouble kk = (kern_datap)[0+(__inc_kern_p*(p))+(__inc_kern_q*(q))], aa = (a_datap)[0+(__inc_a_m*(i2))+(__inc_a_n*(j2))];
214             PDL_IF_BAD(if ( !PDL_ISBAD2(kk,kern_badval,A,kern_badval_isnan) && !PDL_ISBAD2(aa,a_badval,A,a_badval_isnan) ),) {
215             PDL_IF_BAD(flag = 1;,)
216             if ( kk > 0 )
217             (tmp_datap)[0+(__inc_tmp_pq*(count++))] = aa * kk;
218             }
219             } /* if: i2 >= 0 */
220             }} /* Close p */
221             #line 349 "lib/PDL/Image2D.pd"
222             }} /* Close q */
223             #line 350 "lib/PDL/Image2D.pd"
224             PDL_IF_BAD(if ( flag == 0 ) {
225             (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))]=b_badval;
226             } else,) {
227             qsort_D( tmp_datap, 0, count-1 );
228             (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))] = (tmp_datap)[0+(__inc_tmp_pq*((count-1)/2))];
229             }
230             }} /* Close n */}} /* Close m */
231             #line 357 "lib/PDL/Image2D.pd"
232             PDL_BROADCASTLOOP_END_med2d_readdata
233             #line 234 "lib/PDL/Image2D-pp-med2d.c"
234             }
235 0           } break;
236 0           case PDL_B: {
237 0 0         PDL_DECLARE_PARAMS_med2d_1(PDL_Byte,B,PDL_Double,D,PDL_Indx,N,PDL_Indx,N)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
238 0           {int i,j, i2,j2, poff, qoff;int opt = __params->opt;
239 0           int m_size = __privtrans->ind_sizes[2];
240 0           int n_size = __privtrans->ind_sizes[3];
241 0           int p_size = __privtrans->ind_sizes[4];
242 0           int q_size = __privtrans->ind_sizes[6];
243            
244 0           PDL_Indx *mapi = mapi_datap, *mapj = mapj_datap;
245 0 0         if ((mapi==NULL) || (mapj==NULL)) return PDL->make_error(PDL_EUSERERROR, "Error in med2d:" "Out of Memory");
    0          
246              
247 0           poff = p_size/2; mapi += p_size-1;
248 0           qoff = q_size/2; mapj += q_size-1;
249 0 0         for ( i = 1-p_size; i< m_size; i++) {
250 0           i2 = i + poff;
251 0           switch (opt) {
252 0           case 1: /* REFLECT */
253 0 0         if (i2<0)
254 0           i2 = -i2-1;
255 0 0         else if (i2 >= m_size)
256 0           i2 = 2*m_size-(i2+1);
257 0           break;
258 0           case 2: /* TRUNCATE */
259 0 0         if (i2<0 || i2 >= m_size)
    0          
260 0           i2 = -1;
261 0           break;
262 0           case 3: /* REPLICATE */
263 0 0         if (i2<0)
264 0           i2 = 0;
265 0 0         if (i2 >= m_size)
266 0           i2 = m_size-1;
267 0           break;
268 0           default:
269 0 0         REALMOD(i2,m_size);
    0          
270             }
271 0           mapi[i] = i2;
272             }
273 0 0         for ( j = 1-q_size; j< n_size; j++) {
274 0           j2 = j + qoff;
275 0           switch (opt) {
276 0           case 1: /* REFLECT */
277 0 0         if (j2<0)
278 0           j2 = -j2-1;
279 0 0         else if (j2 >= n_size)
280 0           j2 = 2*n_size-(j2+1);
281 0           break;
282 0           case 2: /* TRUNCATE */
283 0 0         if (j2<0 || j2 >= n_size)
    0          
284 0           j2 = -1;
285 0           break;
286 0           case 3: /* REPLICATE */
287 0 0         if (j2<0)
288 0           j2 = 0;
289 0 0         if (j2 >= n_size)
290 0           j2 = n_size-1;
291 0           break;
292 0           default:
293 0 0         REALMOD(j2,n_size);
    0          
294             }
295 0           mapj[j] = j2;
296             }
297              
298             #line 331 "lib/PDL/Image2D.pd"
299             PDL_BROADCASTLOOP_START_med2d_readdata
300             #line 332 "lib/PDL/Image2D.pd"
301             {/* 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) {
302             #line 333 "lib/PDL/Image2D.pd"
303             PDL_Indx count = 0;
304             PDL_IF_BAD(int flag = 0;,)
305             {/* Open q */ PDL_EXPAND2(register PDL_Indx q=0, __q_stop=(__q_size)); for(; q<__q_stop; q+=1) {
306             #line 336 "lib/PDL/Image2D.pd"
307             j2 = mapj[n-q];
308             if (j2 >= 0)
309             {/* Open p */ PDL_EXPAND2(register PDL_Indx p=0, __p_stop=(__p_size)); for(; p<__p_stop; p+=1) {
310             #line 339 "lib/PDL/Image2D.pd"
311             i2 = mapi[m-p];
312             if (i2 >= 0) {
313             PDL_LDouble kk = (kern_datap)[0+(__inc_kern_p*(p))+(__inc_kern_q*(q))], aa = (a_datap)[0+(__inc_a_m*(i2))+(__inc_a_n*(j2))];
314             PDL_IF_BAD(if ( !PDL_ISBAD2(kk,kern_badval,B,kern_badval_isnan) && !PDL_ISBAD2(aa,a_badval,B,a_badval_isnan) ),) {
315             PDL_IF_BAD(flag = 1;,)
316             if ( kk > 0 )
317             (tmp_datap)[0+(__inc_tmp_pq*(count++))] = aa * kk;
318             }
319             } /* if: i2 >= 0 */
320             }} /* Close p */
321             #line 349 "lib/PDL/Image2D.pd"
322             }} /* Close q */
323             #line 350 "lib/PDL/Image2D.pd"
324             PDL_IF_BAD(if ( flag == 0 ) {
325             (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))]=b_badval;
326             } else,) {
327             qsort_D( tmp_datap, 0, count-1 );
328             (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))] = (tmp_datap)[0+(__inc_tmp_pq*((count-1)/2))];
329             }
330             }} /* Close n */}} /* Close m */
331             #line 357 "lib/PDL/Image2D.pd"
332             PDL_BROADCASTLOOP_END_med2d_readdata
333             #line 334 "lib/PDL/Image2D-pp-med2d.c"
334             }
335 0           } break;
336 0           case PDL_S: {
337 0 0         PDL_DECLARE_PARAMS_med2d_1(PDL_Short,S,PDL_Double,D,PDL_Indx,N,PDL_Indx,N)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
338 0           {int i,j, i2,j2, poff, qoff;int opt = __params->opt;
339 0           int m_size = __privtrans->ind_sizes[2];
340 0           int n_size = __privtrans->ind_sizes[3];
341 0           int p_size = __privtrans->ind_sizes[4];
342 0           int q_size = __privtrans->ind_sizes[6];
343            
344 0           PDL_Indx *mapi = mapi_datap, *mapj = mapj_datap;
345 0 0         if ((mapi==NULL) || (mapj==NULL)) return PDL->make_error(PDL_EUSERERROR, "Error in med2d:" "Out of Memory");
    0          
346              
347 0           poff = p_size/2; mapi += p_size-1;
348 0           qoff = q_size/2; mapj += q_size-1;
349 0 0         for ( i = 1-p_size; i< m_size; i++) {
350 0           i2 = i + poff;
351 0           switch (opt) {
352 0           case 1: /* REFLECT */
353 0 0         if (i2<0)
354 0           i2 = -i2-1;
355 0 0         else if (i2 >= m_size)
356 0           i2 = 2*m_size-(i2+1);
357 0           break;
358 0           case 2: /* TRUNCATE */
359 0 0         if (i2<0 || i2 >= m_size)
    0          
360 0           i2 = -1;
361 0           break;
362 0           case 3: /* REPLICATE */
363 0 0         if (i2<0)
364 0           i2 = 0;
365 0 0         if (i2 >= m_size)
366 0           i2 = m_size-1;
367 0           break;
368 0           default:
369 0 0         REALMOD(i2,m_size);
    0          
370             }
371 0           mapi[i] = i2;
372             }
373 0 0         for ( j = 1-q_size; j< n_size; j++) {
374 0           j2 = j + qoff;
375 0           switch (opt) {
376 0           case 1: /* REFLECT */
377 0 0         if (j2<0)
378 0           j2 = -j2-1;
379 0 0         else if (j2 >= n_size)
380 0           j2 = 2*n_size-(j2+1);
381 0           break;
382 0           case 2: /* TRUNCATE */
383 0 0         if (j2<0 || j2 >= n_size)
    0          
384 0           j2 = -1;
385 0           break;
386 0           case 3: /* REPLICATE */
387 0 0         if (j2<0)
388 0           j2 = 0;
389 0 0         if (j2 >= n_size)
390 0           j2 = n_size-1;
391 0           break;
392 0           default:
393 0 0         REALMOD(j2,n_size);
    0          
394             }
395 0           mapj[j] = j2;
396             }
397              
398             #line 331 "lib/PDL/Image2D.pd"
399             PDL_BROADCASTLOOP_START_med2d_readdata
400             #line 332 "lib/PDL/Image2D.pd"
401             {/* 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) {
402             #line 333 "lib/PDL/Image2D.pd"
403             PDL_Indx count = 0;
404             PDL_IF_BAD(int flag = 0;,)
405             {/* Open q */ PDL_EXPAND2(register PDL_Indx q=0, __q_stop=(__q_size)); for(; q<__q_stop; q+=1) {
406             #line 336 "lib/PDL/Image2D.pd"
407             j2 = mapj[n-q];
408             if (j2 >= 0)
409             {/* Open p */ PDL_EXPAND2(register PDL_Indx p=0, __p_stop=(__p_size)); for(; p<__p_stop; p+=1) {
410             #line 339 "lib/PDL/Image2D.pd"
411             i2 = mapi[m-p];
412             if (i2 >= 0) {
413             PDL_LDouble kk = (kern_datap)[0+(__inc_kern_p*(p))+(__inc_kern_q*(q))], aa = (a_datap)[0+(__inc_a_m*(i2))+(__inc_a_n*(j2))];
414             PDL_IF_BAD(if ( !PDL_ISBAD2(kk,kern_badval,S,kern_badval_isnan) && !PDL_ISBAD2(aa,a_badval,S,a_badval_isnan) ),) {
415             PDL_IF_BAD(flag = 1;,)
416             if ( kk > 0 )
417             (tmp_datap)[0+(__inc_tmp_pq*(count++))] = aa * kk;
418             }
419             } /* if: i2 >= 0 */
420             }} /* Close p */
421             #line 349 "lib/PDL/Image2D.pd"
422             }} /* Close q */
423             #line 350 "lib/PDL/Image2D.pd"
424             PDL_IF_BAD(if ( flag == 0 ) {
425             (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))]=b_badval;
426             } else,) {
427             qsort_D( tmp_datap, 0, count-1 );
428             (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))] = (tmp_datap)[0+(__inc_tmp_pq*((count-1)/2))];
429             }
430             }} /* Close n */}} /* Close m */
431             #line 357 "lib/PDL/Image2D.pd"
432             PDL_BROADCASTLOOP_END_med2d_readdata
433             #line 434 "lib/PDL/Image2D-pp-med2d.c"
434             }
435 0           } break;
436 0           case PDL_US: {
437 0 0         PDL_DECLARE_PARAMS_med2d_1(PDL_Ushort,U,PDL_Double,D,PDL_Indx,N,PDL_Indx,N)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
438 0           {int i,j, i2,j2, poff, qoff;int opt = __params->opt;
439 0           int m_size = __privtrans->ind_sizes[2];
440 0           int n_size = __privtrans->ind_sizes[3];
441 0           int p_size = __privtrans->ind_sizes[4];
442 0           int q_size = __privtrans->ind_sizes[6];
443            
444 0           PDL_Indx *mapi = mapi_datap, *mapj = mapj_datap;
445 0 0         if ((mapi==NULL) || (mapj==NULL)) return PDL->make_error(PDL_EUSERERROR, "Error in med2d:" "Out of Memory");
    0          
446              
447 0           poff = p_size/2; mapi += p_size-1;
448 0           qoff = q_size/2; mapj += q_size-1;
449 0 0         for ( i = 1-p_size; i< m_size; i++) {
450 0           i2 = i + poff;
451 0           switch (opt) {
452 0           case 1: /* REFLECT */
453 0 0         if (i2<0)
454 0           i2 = -i2-1;
455 0 0         else if (i2 >= m_size)
456 0           i2 = 2*m_size-(i2+1);
457 0           break;
458 0           case 2: /* TRUNCATE */
459 0 0         if (i2<0 || i2 >= m_size)
    0          
460 0           i2 = -1;
461 0           break;
462 0           case 3: /* REPLICATE */
463 0 0         if (i2<0)
464 0           i2 = 0;
465 0 0         if (i2 >= m_size)
466 0           i2 = m_size-1;
467 0           break;
468 0           default:
469 0 0         REALMOD(i2,m_size);
    0          
470             }
471 0           mapi[i] = i2;
472             }
473 0 0         for ( j = 1-q_size; j< n_size; j++) {
474 0           j2 = j + qoff;
475 0           switch (opt) {
476 0           case 1: /* REFLECT */
477 0 0         if (j2<0)
478 0           j2 = -j2-1;
479 0 0         else if (j2 >= n_size)
480 0           j2 = 2*n_size-(j2+1);
481 0           break;
482 0           case 2: /* TRUNCATE */
483 0 0         if (j2<0 || j2 >= n_size)
    0          
484 0           j2 = -1;
485 0           break;
486 0           case 3: /* REPLICATE */
487 0 0         if (j2<0)
488 0           j2 = 0;
489 0 0         if (j2 >= n_size)
490 0           j2 = n_size-1;
491 0           break;
492 0           default:
493 0 0         REALMOD(j2,n_size);
    0          
494             }
495 0           mapj[j] = j2;
496             }
497              
498             #line 331 "lib/PDL/Image2D.pd"
499             PDL_BROADCASTLOOP_START_med2d_readdata
500             #line 332 "lib/PDL/Image2D.pd"
501             {/* 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) {
502             #line 333 "lib/PDL/Image2D.pd"
503             PDL_Indx count = 0;
504             PDL_IF_BAD(int flag = 0;,)
505             {/* Open q */ PDL_EXPAND2(register PDL_Indx q=0, __q_stop=(__q_size)); for(; q<__q_stop; q+=1) {
506             #line 336 "lib/PDL/Image2D.pd"
507             j2 = mapj[n-q];
508             if (j2 >= 0)
509             {/* Open p */ PDL_EXPAND2(register PDL_Indx p=0, __p_stop=(__p_size)); for(; p<__p_stop; p+=1) {
510             #line 339 "lib/PDL/Image2D.pd"
511             i2 = mapi[m-p];
512             if (i2 >= 0) {
513             PDL_LDouble kk = (kern_datap)[0+(__inc_kern_p*(p))+(__inc_kern_q*(q))], aa = (a_datap)[0+(__inc_a_m*(i2))+(__inc_a_n*(j2))];
514             PDL_IF_BAD(if ( !PDL_ISBAD2(kk,kern_badval,U,kern_badval_isnan) && !PDL_ISBAD2(aa,a_badval,U,a_badval_isnan) ),) {
515             PDL_IF_BAD(flag = 1;,)
516             if ( kk > 0 )
517             (tmp_datap)[0+(__inc_tmp_pq*(count++))] = aa * kk;
518             }
519             } /* if: i2 >= 0 */
520             }} /* Close p */
521             #line 349 "lib/PDL/Image2D.pd"
522             }} /* Close q */
523             #line 350 "lib/PDL/Image2D.pd"
524             PDL_IF_BAD(if ( flag == 0 ) {
525             (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))]=b_badval;
526             } else,) {
527             qsort_D( tmp_datap, 0, count-1 );
528             (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))] = (tmp_datap)[0+(__inc_tmp_pq*((count-1)/2))];
529             }
530             }} /* Close n */}} /* Close m */
531             #line 357 "lib/PDL/Image2D.pd"
532             PDL_BROADCASTLOOP_END_med2d_readdata
533             #line 534 "lib/PDL/Image2D-pp-med2d.c"
534             }
535 0           } break;
536 0           case PDL_L: {
537 0 0         PDL_DECLARE_PARAMS_med2d_1(PDL_Long,L,PDL_Double,D,PDL_Indx,N,PDL_Indx,N)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
538 0           {int i,j, i2,j2, poff, qoff;int opt = __params->opt;
539 0           int m_size = __privtrans->ind_sizes[2];
540 0           int n_size = __privtrans->ind_sizes[3];
541 0           int p_size = __privtrans->ind_sizes[4];
542 0           int q_size = __privtrans->ind_sizes[6];
543            
544 0           PDL_Indx *mapi = mapi_datap, *mapj = mapj_datap;
545 0 0         if ((mapi==NULL) || (mapj==NULL)) return PDL->make_error(PDL_EUSERERROR, "Error in med2d:" "Out of Memory");
    0          
546              
547 0           poff = p_size/2; mapi += p_size-1;
548 0           qoff = q_size/2; mapj += q_size-1;
549 0 0         for ( i = 1-p_size; i< m_size; i++) {
550 0           i2 = i + poff;
551 0           switch (opt) {
552 0           case 1: /* REFLECT */
553 0 0         if (i2<0)
554 0           i2 = -i2-1;
555 0 0         else if (i2 >= m_size)
556 0           i2 = 2*m_size-(i2+1);
557 0           break;
558 0           case 2: /* TRUNCATE */
559 0 0         if (i2<0 || i2 >= m_size)
    0          
560 0           i2 = -1;
561 0           break;
562 0           case 3: /* REPLICATE */
563 0 0         if (i2<0)
564 0           i2 = 0;
565 0 0         if (i2 >= m_size)
566 0           i2 = m_size-1;
567 0           break;
568 0           default:
569 0 0         REALMOD(i2,m_size);
    0          
570             }
571 0           mapi[i] = i2;
572             }
573 0 0         for ( j = 1-q_size; j< n_size; j++) {
574 0           j2 = j + qoff;
575 0           switch (opt) {
576 0           case 1: /* REFLECT */
577 0 0         if (j2<0)
578 0           j2 = -j2-1;
579 0 0         else if (j2 >= n_size)
580 0           j2 = 2*n_size-(j2+1);
581 0           break;
582 0           case 2: /* TRUNCATE */
583 0 0         if (j2<0 || j2 >= n_size)
    0          
584 0           j2 = -1;
585 0           break;
586 0           case 3: /* REPLICATE */
587 0 0         if (j2<0)
588 0           j2 = 0;
589 0 0         if (j2 >= n_size)
590 0           j2 = n_size-1;
591 0           break;
592 0           default:
593 0 0         REALMOD(j2,n_size);
    0          
594             }
595 0           mapj[j] = j2;
596             }
597              
598             #line 331 "lib/PDL/Image2D.pd"
599             PDL_BROADCASTLOOP_START_med2d_readdata
600             #line 332 "lib/PDL/Image2D.pd"
601             {/* 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) {
602             #line 333 "lib/PDL/Image2D.pd"
603             PDL_Indx count = 0;
604             PDL_IF_BAD(int flag = 0;,)
605             {/* Open q */ PDL_EXPAND2(register PDL_Indx q=0, __q_stop=(__q_size)); for(; q<__q_stop; q+=1) {
606             #line 336 "lib/PDL/Image2D.pd"
607             j2 = mapj[n-q];
608             if (j2 >= 0)
609             {/* Open p */ PDL_EXPAND2(register PDL_Indx p=0, __p_stop=(__p_size)); for(; p<__p_stop; p+=1) {
610             #line 339 "lib/PDL/Image2D.pd"
611             i2 = mapi[m-p];
612             if (i2 >= 0) {
613             PDL_LDouble kk = (kern_datap)[0+(__inc_kern_p*(p))+(__inc_kern_q*(q))], aa = (a_datap)[0+(__inc_a_m*(i2))+(__inc_a_n*(j2))];
614             PDL_IF_BAD(if ( !PDL_ISBAD2(kk,kern_badval,L,kern_badval_isnan) && !PDL_ISBAD2(aa,a_badval,L,a_badval_isnan) ),) {
615             PDL_IF_BAD(flag = 1;,)
616             if ( kk > 0 )
617             (tmp_datap)[0+(__inc_tmp_pq*(count++))] = aa * kk;
618             }
619             } /* if: i2 >= 0 */
620             }} /* Close p */
621             #line 349 "lib/PDL/Image2D.pd"
622             }} /* Close q */
623             #line 350 "lib/PDL/Image2D.pd"
624             PDL_IF_BAD(if ( flag == 0 ) {
625             (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))]=b_badval;
626             } else,) {
627             qsort_D( tmp_datap, 0, count-1 );
628             (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))] = (tmp_datap)[0+(__inc_tmp_pq*((count-1)/2))];
629             }
630             }} /* Close n */}} /* Close m */
631             #line 357 "lib/PDL/Image2D.pd"
632             PDL_BROADCASTLOOP_END_med2d_readdata
633             #line 634 "lib/PDL/Image2D-pp-med2d.c"
634             }
635 0           } break;
636 0           case PDL_UL: {
637 0 0         PDL_DECLARE_PARAMS_med2d_1(PDL_ULong,K,PDL_Double,D,PDL_Indx,N,PDL_Indx,N)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
638 0           {int i,j, i2,j2, poff, qoff;int opt = __params->opt;
639 0           int m_size = __privtrans->ind_sizes[2];
640 0           int n_size = __privtrans->ind_sizes[3];
641 0           int p_size = __privtrans->ind_sizes[4];
642 0           int q_size = __privtrans->ind_sizes[6];
643            
644 0           PDL_Indx *mapi = mapi_datap, *mapj = mapj_datap;
645 0 0         if ((mapi==NULL) || (mapj==NULL)) return PDL->make_error(PDL_EUSERERROR, "Error in med2d:" "Out of Memory");
    0          
646              
647 0           poff = p_size/2; mapi += p_size-1;
648 0           qoff = q_size/2; mapj += q_size-1;
649 0 0         for ( i = 1-p_size; i< m_size; i++) {
650 0           i2 = i + poff;
651 0           switch (opt) {
652 0           case 1: /* REFLECT */
653 0 0         if (i2<0)
654 0           i2 = -i2-1;
655 0 0         else if (i2 >= m_size)
656 0           i2 = 2*m_size-(i2+1);
657 0           break;
658 0           case 2: /* TRUNCATE */
659 0 0         if (i2<0 || i2 >= m_size)
    0          
660 0           i2 = -1;
661 0           break;
662 0           case 3: /* REPLICATE */
663 0 0         if (i2<0)
664 0           i2 = 0;
665 0 0         if (i2 >= m_size)
666 0           i2 = m_size-1;
667 0           break;
668 0           default:
669 0 0         REALMOD(i2,m_size);
    0          
670             }
671 0           mapi[i] = i2;
672             }
673 0 0         for ( j = 1-q_size; j< n_size; j++) {
674 0           j2 = j + qoff;
675 0           switch (opt) {
676 0           case 1: /* REFLECT */
677 0 0         if (j2<0)
678 0           j2 = -j2-1;
679 0 0         else if (j2 >= n_size)
680 0           j2 = 2*n_size-(j2+1);
681 0           break;
682 0           case 2: /* TRUNCATE */
683 0 0         if (j2<0 || j2 >= n_size)
    0          
684 0           j2 = -1;
685 0           break;
686 0           case 3: /* REPLICATE */
687 0 0         if (j2<0)
688 0           j2 = 0;
689 0 0         if (j2 >= n_size)
690 0           j2 = n_size-1;
691 0           break;
692 0           default:
693 0 0         REALMOD(j2,n_size);
    0          
694             }
695 0           mapj[j] = j2;
696             }
697              
698             #line 331 "lib/PDL/Image2D.pd"
699             PDL_BROADCASTLOOP_START_med2d_readdata
700             #line 332 "lib/PDL/Image2D.pd"
701             {/* 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) {
702             #line 333 "lib/PDL/Image2D.pd"
703             PDL_Indx count = 0;
704             PDL_IF_BAD(int flag = 0;,)
705             {/* Open q */ PDL_EXPAND2(register PDL_Indx q=0, __q_stop=(__q_size)); for(; q<__q_stop; q+=1) {
706             #line 336 "lib/PDL/Image2D.pd"
707             j2 = mapj[n-q];
708             if (j2 >= 0)
709             {/* Open p */ PDL_EXPAND2(register PDL_Indx p=0, __p_stop=(__p_size)); for(; p<__p_stop; p+=1) {
710             #line 339 "lib/PDL/Image2D.pd"
711             i2 = mapi[m-p];
712             if (i2 >= 0) {
713             PDL_LDouble kk = (kern_datap)[0+(__inc_kern_p*(p))+(__inc_kern_q*(q))], aa = (a_datap)[0+(__inc_a_m*(i2))+(__inc_a_n*(j2))];
714             PDL_IF_BAD(if ( !PDL_ISBAD2(kk,kern_badval,K,kern_badval_isnan) && !PDL_ISBAD2(aa,a_badval,K,a_badval_isnan) ),) {
715             PDL_IF_BAD(flag = 1;,)
716             if ( kk > 0 )
717             (tmp_datap)[0+(__inc_tmp_pq*(count++))] = aa * kk;
718             }
719             } /* if: i2 >= 0 */
720             }} /* Close p */
721             #line 349 "lib/PDL/Image2D.pd"
722             }} /* Close q */
723             #line 350 "lib/PDL/Image2D.pd"
724             PDL_IF_BAD(if ( flag == 0 ) {
725             (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))]=b_badval;
726             } else,) {
727             qsort_D( tmp_datap, 0, count-1 );
728             (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))] = (tmp_datap)[0+(__inc_tmp_pq*((count-1)/2))];
729             }
730             }} /* Close n */}} /* Close m */
731             #line 357 "lib/PDL/Image2D.pd"
732             PDL_BROADCASTLOOP_END_med2d_readdata
733             #line 734 "lib/PDL/Image2D-pp-med2d.c"
734             }
735 0           } break;
736 0           case PDL_IND: {
737 0 0         PDL_DECLARE_PARAMS_med2d_1(PDL_Indx,N,PDL_Double,D,PDL_Indx,N,PDL_Indx,N)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
738 0           {int i,j, i2,j2, poff, qoff;int opt = __params->opt;
739 0           int m_size = __privtrans->ind_sizes[2];
740 0           int n_size = __privtrans->ind_sizes[3];
741 0           int p_size = __privtrans->ind_sizes[4];
742 0           int q_size = __privtrans->ind_sizes[6];
743            
744 0           PDL_Indx *mapi = mapi_datap, *mapj = mapj_datap;
745 0 0         if ((mapi==NULL) || (mapj==NULL)) return PDL->make_error(PDL_EUSERERROR, "Error in med2d:" "Out of Memory");
    0          
746              
747 0           poff = p_size/2; mapi += p_size-1;
748 0           qoff = q_size/2; mapj += q_size-1;
749 0 0         for ( i = 1-p_size; i< m_size; i++) {
750 0           i2 = i + poff;
751 0           switch (opt) {
752 0           case 1: /* REFLECT */
753 0 0         if (i2<0)
754 0           i2 = -i2-1;
755 0 0         else if (i2 >= m_size)
756 0           i2 = 2*m_size-(i2+1);
757 0           break;
758 0           case 2: /* TRUNCATE */
759 0 0         if (i2<0 || i2 >= m_size)
    0          
760 0           i2 = -1;
761 0           break;
762 0           case 3: /* REPLICATE */
763 0 0         if (i2<0)
764 0           i2 = 0;
765 0 0         if (i2 >= m_size)
766 0           i2 = m_size-1;
767 0           break;
768 0           default:
769 0 0         REALMOD(i2,m_size);
    0          
770             }
771 0           mapi[i] = i2;
772             }
773 0 0         for ( j = 1-q_size; j< n_size; j++) {
774 0           j2 = j + qoff;
775 0           switch (opt) {
776 0           case 1: /* REFLECT */
777 0 0         if (j2<0)
778 0           j2 = -j2-1;
779 0 0         else if (j2 >= n_size)
780 0           j2 = 2*n_size-(j2+1);
781 0           break;
782 0           case 2: /* TRUNCATE */
783 0 0         if (j2<0 || j2 >= n_size)
    0          
784 0           j2 = -1;
785 0           break;
786 0           case 3: /* REPLICATE */
787 0 0         if (j2<0)
788 0           j2 = 0;
789 0 0         if (j2 >= n_size)
790 0           j2 = n_size-1;
791 0           break;
792 0           default:
793 0 0         REALMOD(j2,n_size);
    0          
794             }
795 0           mapj[j] = j2;
796             }
797              
798             #line 331 "lib/PDL/Image2D.pd"
799             PDL_BROADCASTLOOP_START_med2d_readdata
800             #line 332 "lib/PDL/Image2D.pd"
801             {/* 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) {
802             #line 333 "lib/PDL/Image2D.pd"
803             PDL_Indx count = 0;
804             PDL_IF_BAD(int flag = 0;,)
805             {/* Open q */ PDL_EXPAND2(register PDL_Indx q=0, __q_stop=(__q_size)); for(; q<__q_stop; q+=1) {
806             #line 336 "lib/PDL/Image2D.pd"
807             j2 = mapj[n-q];
808             if (j2 >= 0)
809             {/* Open p */ PDL_EXPAND2(register PDL_Indx p=0, __p_stop=(__p_size)); for(; p<__p_stop; p+=1) {
810             #line 339 "lib/PDL/Image2D.pd"
811             i2 = mapi[m-p];
812             if (i2 >= 0) {
813             PDL_LDouble kk = (kern_datap)[0+(__inc_kern_p*(p))+(__inc_kern_q*(q))], aa = (a_datap)[0+(__inc_a_m*(i2))+(__inc_a_n*(j2))];
814             PDL_IF_BAD(if ( !PDL_ISBAD2(kk,kern_badval,N,kern_badval_isnan) && !PDL_ISBAD2(aa,a_badval,N,a_badval_isnan) ),) {
815             PDL_IF_BAD(flag = 1;,)
816             if ( kk > 0 )
817             (tmp_datap)[0+(__inc_tmp_pq*(count++))] = aa * kk;
818             }
819             } /* if: i2 >= 0 */
820             }} /* Close p */
821             #line 349 "lib/PDL/Image2D.pd"
822             }} /* Close q */
823             #line 350 "lib/PDL/Image2D.pd"
824             PDL_IF_BAD(if ( flag == 0 ) {
825             (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))]=b_badval;
826             } else,) {
827             qsort_D( tmp_datap, 0, count-1 );
828             (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))] = (tmp_datap)[0+(__inc_tmp_pq*((count-1)/2))];
829             }
830             }} /* Close n */}} /* Close m */
831             #line 357 "lib/PDL/Image2D.pd"
832             PDL_BROADCASTLOOP_END_med2d_readdata
833             #line 834 "lib/PDL/Image2D-pp-med2d.c"
834             }
835 0           } break;
836 0           case PDL_ULL: {
837 0 0         PDL_DECLARE_PARAMS_med2d_1(PDL_ULongLong,P,PDL_Double,D,PDL_Indx,N,PDL_Indx,N)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
838 0           {int i,j, i2,j2, poff, qoff;int opt = __params->opt;
839 0           int m_size = __privtrans->ind_sizes[2];
840 0           int n_size = __privtrans->ind_sizes[3];
841 0           int p_size = __privtrans->ind_sizes[4];
842 0           int q_size = __privtrans->ind_sizes[6];
843            
844 0           PDL_Indx *mapi = mapi_datap, *mapj = mapj_datap;
845 0 0         if ((mapi==NULL) || (mapj==NULL)) return PDL->make_error(PDL_EUSERERROR, "Error in med2d:" "Out of Memory");
    0          
846              
847 0           poff = p_size/2; mapi += p_size-1;
848 0           qoff = q_size/2; mapj += q_size-1;
849 0 0         for ( i = 1-p_size; i< m_size; i++) {
850 0           i2 = i + poff;
851 0           switch (opt) {
852 0           case 1: /* REFLECT */
853 0 0         if (i2<0)
854 0           i2 = -i2-1;
855 0 0         else if (i2 >= m_size)
856 0           i2 = 2*m_size-(i2+1);
857 0           break;
858 0           case 2: /* TRUNCATE */
859 0 0         if (i2<0 || i2 >= m_size)
    0          
860 0           i2 = -1;
861 0           break;
862 0           case 3: /* REPLICATE */
863 0 0         if (i2<0)
864 0           i2 = 0;
865 0 0         if (i2 >= m_size)
866 0           i2 = m_size-1;
867 0           break;
868 0           default:
869 0 0         REALMOD(i2,m_size);
    0          
870             }
871 0           mapi[i] = i2;
872             }
873 0 0         for ( j = 1-q_size; j< n_size; j++) {
874 0           j2 = j + qoff;
875 0           switch (opt) {
876 0           case 1: /* REFLECT */
877 0 0         if (j2<0)
878 0           j2 = -j2-1;
879 0 0         else if (j2 >= n_size)
880 0           j2 = 2*n_size-(j2+1);
881 0           break;
882 0           case 2: /* TRUNCATE */
883 0 0         if (j2<0 || j2 >= n_size)
    0          
884 0           j2 = -1;
885 0           break;
886 0           case 3: /* REPLICATE */
887 0 0         if (j2<0)
888 0           j2 = 0;
889 0 0         if (j2 >= n_size)
890 0           j2 = n_size-1;
891 0           break;
892 0           default:
893 0 0         REALMOD(j2,n_size);
    0          
894             }
895 0           mapj[j] = j2;
896             }
897              
898             #line 331 "lib/PDL/Image2D.pd"
899             PDL_BROADCASTLOOP_START_med2d_readdata
900             #line 332 "lib/PDL/Image2D.pd"
901             {/* 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) {
902             #line 333 "lib/PDL/Image2D.pd"
903             PDL_Indx count = 0;
904             PDL_IF_BAD(int flag = 0;,)
905             {/* Open q */ PDL_EXPAND2(register PDL_Indx q=0, __q_stop=(__q_size)); for(; q<__q_stop; q+=1) {
906             #line 336 "lib/PDL/Image2D.pd"
907             j2 = mapj[n-q];
908             if (j2 >= 0)
909             {/* Open p */ PDL_EXPAND2(register PDL_Indx p=0, __p_stop=(__p_size)); for(; p<__p_stop; p+=1) {
910             #line 339 "lib/PDL/Image2D.pd"
911             i2 = mapi[m-p];
912             if (i2 >= 0) {
913             PDL_LDouble kk = (kern_datap)[0+(__inc_kern_p*(p))+(__inc_kern_q*(q))], aa = (a_datap)[0+(__inc_a_m*(i2))+(__inc_a_n*(j2))];
914             PDL_IF_BAD(if ( !PDL_ISBAD2(kk,kern_badval,P,kern_badval_isnan) && !PDL_ISBAD2(aa,a_badval,P,a_badval_isnan) ),) {
915             PDL_IF_BAD(flag = 1;,)
916             if ( kk > 0 )
917             (tmp_datap)[0+(__inc_tmp_pq*(count++))] = aa * kk;
918             }
919             } /* if: i2 >= 0 */
920             }} /* Close p */
921             #line 349 "lib/PDL/Image2D.pd"
922             }} /* Close q */
923             #line 350 "lib/PDL/Image2D.pd"
924             PDL_IF_BAD(if ( flag == 0 ) {
925             (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))]=b_badval;
926             } else,) {
927             qsort_D( tmp_datap, 0, count-1 );
928             (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))] = (tmp_datap)[0+(__inc_tmp_pq*((count-1)/2))];
929             }
930             }} /* Close n */}} /* Close m */
931             #line 357 "lib/PDL/Image2D.pd"
932             PDL_BROADCASTLOOP_END_med2d_readdata
933             #line 934 "lib/PDL/Image2D-pp-med2d.c"
934             }
935 0           } break;
936 0           case PDL_LL: {
937 0 0         PDL_DECLARE_PARAMS_med2d_1(PDL_LongLong,Q,PDL_Double,D,PDL_Indx,N,PDL_Indx,N)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
938 0           {int i,j, i2,j2, poff, qoff;int opt = __params->opt;
939 0           int m_size = __privtrans->ind_sizes[2];
940 0           int n_size = __privtrans->ind_sizes[3];
941 0           int p_size = __privtrans->ind_sizes[4];
942 0           int q_size = __privtrans->ind_sizes[6];
943            
944 0           PDL_Indx *mapi = mapi_datap, *mapj = mapj_datap;
945 0 0         if ((mapi==NULL) || (mapj==NULL)) return PDL->make_error(PDL_EUSERERROR, "Error in med2d:" "Out of Memory");
    0          
946              
947 0           poff = p_size/2; mapi += p_size-1;
948 0           qoff = q_size/2; mapj += q_size-1;
949 0 0         for ( i = 1-p_size; i< m_size; i++) {
950 0           i2 = i + poff;
951 0           switch (opt) {
952 0           case 1: /* REFLECT */
953 0 0         if (i2<0)
954 0           i2 = -i2-1;
955 0 0         else if (i2 >= m_size)
956 0           i2 = 2*m_size-(i2+1);
957 0           break;
958 0           case 2: /* TRUNCATE */
959 0 0         if (i2<0 || i2 >= m_size)
    0          
960 0           i2 = -1;
961 0           break;
962 0           case 3: /* REPLICATE */
963 0 0         if (i2<0)
964 0           i2 = 0;
965 0 0         if (i2 >= m_size)
966 0           i2 = m_size-1;
967 0           break;
968 0           default:
969 0 0         REALMOD(i2,m_size);
    0          
970             }
971 0           mapi[i] = i2;
972             }
973 0 0         for ( j = 1-q_size; j< n_size; j++) {
974 0           j2 = j + qoff;
975 0           switch (opt) {
976 0           case 1: /* REFLECT */
977 0 0         if (j2<0)
978 0           j2 = -j2-1;
979 0 0         else if (j2 >= n_size)
980 0           j2 = 2*n_size-(j2+1);
981 0           break;
982 0           case 2: /* TRUNCATE */
983 0 0         if (j2<0 || j2 >= n_size)
    0          
984 0           j2 = -1;
985 0           break;
986 0           case 3: /* REPLICATE */
987 0 0         if (j2<0)
988 0           j2 = 0;
989 0 0         if (j2 >= n_size)
990 0           j2 = n_size-1;
991 0           break;
992 0           default:
993 0 0         REALMOD(j2,n_size);
    0          
994             }
995 0           mapj[j] = j2;
996             }
997              
998             #line 331 "lib/PDL/Image2D.pd"
999             PDL_BROADCASTLOOP_START_med2d_readdata
1000             #line 332 "lib/PDL/Image2D.pd"
1001             {/* 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) {
1002             #line 333 "lib/PDL/Image2D.pd"
1003             PDL_Indx count = 0;
1004             PDL_IF_BAD(int flag = 0;,)
1005             {/* Open q */ PDL_EXPAND2(register PDL_Indx q=0, __q_stop=(__q_size)); for(; q<__q_stop; q+=1) {
1006             #line 336 "lib/PDL/Image2D.pd"
1007             j2 = mapj[n-q];
1008             if (j2 >= 0)
1009             {/* Open p */ PDL_EXPAND2(register PDL_Indx p=0, __p_stop=(__p_size)); for(; p<__p_stop; p+=1) {
1010             #line 339 "lib/PDL/Image2D.pd"
1011             i2 = mapi[m-p];
1012             if (i2 >= 0) {
1013             PDL_LDouble kk = (kern_datap)[0+(__inc_kern_p*(p))+(__inc_kern_q*(q))], aa = (a_datap)[0+(__inc_a_m*(i2))+(__inc_a_n*(j2))];
1014             PDL_IF_BAD(if ( !PDL_ISBAD2(kk,kern_badval,Q,kern_badval_isnan) && !PDL_ISBAD2(aa,a_badval,Q,a_badval_isnan) ),) {
1015             PDL_IF_BAD(flag = 1;,)
1016             if ( kk > 0 )
1017             (tmp_datap)[0+(__inc_tmp_pq*(count++))] = aa * kk;
1018             }
1019             } /* if: i2 >= 0 */
1020             }} /* Close p */
1021             #line 349 "lib/PDL/Image2D.pd"
1022             }} /* Close q */
1023             #line 350 "lib/PDL/Image2D.pd"
1024             PDL_IF_BAD(if ( flag == 0 ) {
1025             (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))]=b_badval;
1026             } else,) {
1027             qsort_D( tmp_datap, 0, count-1 );
1028             (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))] = (tmp_datap)[0+(__inc_tmp_pq*((count-1)/2))];
1029             }
1030             }} /* Close n */}} /* Close m */
1031             #line 357 "lib/PDL/Image2D.pd"
1032             PDL_BROADCASTLOOP_END_med2d_readdata
1033             #line 1034 "lib/PDL/Image2D-pp-med2d.c"
1034             }
1035 0           } break;
1036 0           case PDL_F: {
1037 0 0         PDL_DECLARE_PARAMS_med2d_1(PDL_Float,F,PDL_Double,D,PDL_Indx,N,PDL_Indx,N)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
1038 0           {int i,j, i2,j2, poff, qoff;int opt = __params->opt;
1039 0           int m_size = __privtrans->ind_sizes[2];
1040 0           int n_size = __privtrans->ind_sizes[3];
1041 0           int p_size = __privtrans->ind_sizes[4];
1042 0           int q_size = __privtrans->ind_sizes[6];
1043            
1044 0           PDL_Indx *mapi = mapi_datap, *mapj = mapj_datap;
1045 0 0         if ((mapi==NULL) || (mapj==NULL)) return PDL->make_error(PDL_EUSERERROR, "Error in med2d:" "Out of Memory");
    0          
1046              
1047 0           poff = p_size/2; mapi += p_size-1;
1048 0           qoff = q_size/2; mapj += q_size-1;
1049 0 0         for ( i = 1-p_size; i< m_size; i++) {
1050 0           i2 = i + poff;
1051 0           switch (opt) {
1052 0           case 1: /* REFLECT */
1053 0 0         if (i2<0)
1054 0           i2 = -i2-1;
1055 0 0         else if (i2 >= m_size)
1056 0           i2 = 2*m_size-(i2+1);
1057 0           break;
1058 0           case 2: /* TRUNCATE */
1059 0 0         if (i2<0 || i2 >= m_size)
    0          
1060 0           i2 = -1;
1061 0           break;
1062 0           case 3: /* REPLICATE */
1063 0 0         if (i2<0)
1064 0           i2 = 0;
1065 0 0         if (i2 >= m_size)
1066 0           i2 = m_size-1;
1067 0           break;
1068 0           default:
1069 0 0         REALMOD(i2,m_size);
    0          
1070             }
1071 0           mapi[i] = i2;
1072             }
1073 0 0         for ( j = 1-q_size; j< n_size; j++) {
1074 0           j2 = j + qoff;
1075 0           switch (opt) {
1076 0           case 1: /* REFLECT */
1077 0 0         if (j2<0)
1078 0           j2 = -j2-1;
1079 0 0         else if (j2 >= n_size)
1080 0           j2 = 2*n_size-(j2+1);
1081 0           break;
1082 0           case 2: /* TRUNCATE */
1083 0 0         if (j2<0 || j2 >= n_size)
    0          
1084 0           j2 = -1;
1085 0           break;
1086 0           case 3: /* REPLICATE */
1087 0 0         if (j2<0)
1088 0           j2 = 0;
1089 0 0         if (j2 >= n_size)
1090 0           j2 = n_size-1;
1091 0           break;
1092 0           default:
1093 0 0         REALMOD(j2,n_size);
    0          
1094             }
1095 0           mapj[j] = j2;
1096             }
1097              
1098             #line 331 "lib/PDL/Image2D.pd"
1099             PDL_BROADCASTLOOP_START_med2d_readdata
1100             #line 332 "lib/PDL/Image2D.pd"
1101             {/* 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) {
1102             #line 333 "lib/PDL/Image2D.pd"
1103             PDL_Indx count = 0;
1104             PDL_IF_BAD(int flag = 0;,)
1105             {/* Open q */ PDL_EXPAND2(register PDL_Indx q=0, __q_stop=(__q_size)); for(; q<__q_stop; q+=1) {
1106             #line 336 "lib/PDL/Image2D.pd"
1107             j2 = mapj[n-q];
1108             if (j2 >= 0)
1109             {/* Open p */ PDL_EXPAND2(register PDL_Indx p=0, __p_stop=(__p_size)); for(; p<__p_stop; p+=1) {
1110             #line 339 "lib/PDL/Image2D.pd"
1111             i2 = mapi[m-p];
1112             if (i2 >= 0) {
1113             PDL_LDouble kk = (kern_datap)[0+(__inc_kern_p*(p))+(__inc_kern_q*(q))], aa = (a_datap)[0+(__inc_a_m*(i2))+(__inc_a_n*(j2))];
1114             PDL_IF_BAD(if ( !PDL_ISBAD2(kk,kern_badval,F,kern_badval_isnan) && !PDL_ISBAD2(aa,a_badval,F,a_badval_isnan) ),) {
1115             PDL_IF_BAD(flag = 1;,)
1116             if ( kk > 0 )
1117             (tmp_datap)[0+(__inc_tmp_pq*(count++))] = aa * kk;
1118             }
1119             } /* if: i2 >= 0 */
1120             }} /* Close p */
1121             #line 349 "lib/PDL/Image2D.pd"
1122             }} /* Close q */
1123             #line 350 "lib/PDL/Image2D.pd"
1124             PDL_IF_BAD(if ( flag == 0 ) {
1125             (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))]=b_badval;
1126             } else,) {
1127             qsort_D( tmp_datap, 0, count-1 );
1128             (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))] = (tmp_datap)[0+(__inc_tmp_pq*((count-1)/2))];
1129             }
1130             }} /* Close n */}} /* Close m */
1131             #line 357 "lib/PDL/Image2D.pd"
1132             PDL_BROADCASTLOOP_END_med2d_readdata
1133             #line 1134 "lib/PDL/Image2D-pp-med2d.c"
1134             }
1135 0           } break;
1136 1           case PDL_D: {
1137 1 50         PDL_DECLARE_PARAMS_med2d_1(PDL_Double,D,PDL_Double,D,PDL_Indx,N,PDL_Indx,N)
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
1138 1           {int i,j, i2,j2, poff, qoff;int opt = __params->opt;
1139 1           int m_size = __privtrans->ind_sizes[2];
1140 1           int n_size = __privtrans->ind_sizes[3];
1141 1           int p_size = __privtrans->ind_sizes[4];
1142 1           int q_size = __privtrans->ind_sizes[6];
1143            
1144 1           PDL_Indx *mapi = mapi_datap, *mapj = mapj_datap;
1145 1 50         if ((mapi==NULL) || (mapj==NULL)) return PDL->make_error(PDL_EUSERERROR, "Error in med2d:" "Out of Memory");
    50          
1146              
1147 1           poff = p_size/2; mapi += p_size-1;
1148 1           qoff = q_size/2; mapj += q_size-1;
1149 8 100         for ( i = 1-p_size; i< m_size; i++) {
1150 7           i2 = i + poff;
1151 7           switch (opt) {
1152 0           case 1: /* REFLECT */
1153 0 0         if (i2<0)
1154 0           i2 = -i2-1;
1155 0 0         else if (i2 >= m_size)
1156 0           i2 = 2*m_size-(i2+1);
1157 0           break;
1158 0           case 2: /* TRUNCATE */
1159 0 0         if (i2<0 || i2 >= m_size)
    0          
1160 0           i2 = -1;
1161 0           break;
1162 0           case 3: /* REPLICATE */
1163 0 0         if (i2<0)
1164 0           i2 = 0;
1165 0 0         if (i2 >= m_size)
1166 0           i2 = m_size-1;
1167 0           break;
1168 7           default:
1169 9 100         REALMOD(i2,m_size);
    100          
1170             }
1171 7           mapi[i] = i2;
1172             }
1173 8 100         for ( j = 1-q_size; j< n_size; j++) {
1174 7           j2 = j + qoff;
1175 7           switch (opt) {
1176 0           case 1: /* REFLECT */
1177 0 0         if (j2<0)
1178 0           j2 = -j2-1;
1179 0 0         else if (j2 >= n_size)
1180 0           j2 = 2*n_size-(j2+1);
1181 0           break;
1182 0           case 2: /* TRUNCATE */
1183 0 0         if (j2<0 || j2 >= n_size)
    0          
1184 0           j2 = -1;
1185 0           break;
1186 0           case 3: /* REPLICATE */
1187 0 0         if (j2<0)
1188 0           j2 = 0;
1189 0 0         if (j2 >= n_size)
1190 0           j2 = n_size-1;
1191 0           break;
1192 7           default:
1193 9 100         REALMOD(j2,n_size);
    100          
1194             }
1195 7           mapj[j] = j2;
1196             }
1197              
1198             #line 331 "lib/PDL/Image2D.pd"
1199             PDL_BROADCASTLOOP_START_med2d_readdata
1200             #line 332 "lib/PDL/Image2D.pd"
1201             {/* 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) {
1202             #line 333 "lib/PDL/Image2D.pd"
1203             PDL_Indx count = 0;
1204             PDL_IF_BAD(int flag = 0;,)
1205             {/* Open q */ PDL_EXPAND2(register PDL_Indx q=0, __q_stop=(__q_size)); for(; q<__q_stop; q+=1) {
1206             #line 336 "lib/PDL/Image2D.pd"
1207             j2 = mapj[n-q];
1208             if (j2 >= 0)
1209             {/* Open p */ PDL_EXPAND2(register PDL_Indx p=0, __p_stop=(__p_size)); for(; p<__p_stop; p+=1) {
1210             #line 339 "lib/PDL/Image2D.pd"
1211             i2 = mapi[m-p];
1212             if (i2 >= 0) {
1213             PDL_LDouble kk = (kern_datap)[0+(__inc_kern_p*(p))+(__inc_kern_q*(q))], aa = (a_datap)[0+(__inc_a_m*(i2))+(__inc_a_n*(j2))];
1214             PDL_IF_BAD(if ( !PDL_ISBAD2(kk,kern_badval,D,kern_badval_isnan) && !PDL_ISBAD2(aa,a_badval,D,a_badval_isnan) ),) {
1215             PDL_IF_BAD(flag = 1;,)
1216             if ( kk > 0 )
1217             (tmp_datap)[0+(__inc_tmp_pq*(count++))] = aa * kk;
1218             }
1219             } /* if: i2 >= 0 */
1220             }} /* Close p */
1221             #line 349 "lib/PDL/Image2D.pd"
1222             }} /* Close q */
1223             #line 350 "lib/PDL/Image2D.pd"
1224             PDL_IF_BAD(if ( flag == 0 ) {
1225             (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))]=b_badval;
1226             } else,) {
1227             qsort_D( tmp_datap, 0, count-1 );
1228             (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))] = (tmp_datap)[0+(__inc_tmp_pq*((count-1)/2))];
1229             }
1230             }} /* Close n */}} /* Close m */
1231             #line 357 "lib/PDL/Image2D.pd"
1232             PDL_BROADCASTLOOP_END_med2d_readdata
1233             #line 1234 "lib/PDL/Image2D-pp-med2d.c"
1234             }
1235 1           } break;
1236 0           case PDL_LD: {
1237 0 0         PDL_DECLARE_PARAMS_med2d_1(PDL_LDouble,E,PDL_LDouble,E,PDL_Indx,N,PDL_Indx,N)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
1238 0           {int i,j, i2,j2, poff, qoff;int opt = __params->opt;
1239 0           int m_size = __privtrans->ind_sizes[2];
1240 0           int n_size = __privtrans->ind_sizes[3];
1241 0           int p_size = __privtrans->ind_sizes[4];
1242 0           int q_size = __privtrans->ind_sizes[6];
1243            
1244 0           PDL_Indx *mapi = mapi_datap, *mapj = mapj_datap;
1245 0 0         if ((mapi==NULL) || (mapj==NULL)) return PDL->make_error(PDL_EUSERERROR, "Error in med2d:" "Out of Memory");
    0          
1246              
1247 0           poff = p_size/2; mapi += p_size-1;
1248 0           qoff = q_size/2; mapj += q_size-1;
1249 0 0         for ( i = 1-p_size; i< m_size; i++) {
1250 0           i2 = i + poff;
1251 0           switch (opt) {
1252 0           case 1: /* REFLECT */
1253 0 0         if (i2<0)
1254 0           i2 = -i2-1;
1255 0 0         else if (i2 >= m_size)
1256 0           i2 = 2*m_size-(i2+1);
1257 0           break;
1258 0           case 2: /* TRUNCATE */
1259 0 0         if (i2<0 || i2 >= m_size)
    0          
1260 0           i2 = -1;
1261 0           break;
1262 0           case 3: /* REPLICATE */
1263 0 0         if (i2<0)
1264 0           i2 = 0;
1265 0 0         if (i2 >= m_size)
1266 0           i2 = m_size-1;
1267 0           break;
1268 0           default:
1269 0 0         REALMOD(i2,m_size);
    0          
1270             }
1271 0           mapi[i] = i2;
1272             }
1273 0 0         for ( j = 1-q_size; j< n_size; j++) {
1274 0           j2 = j + qoff;
1275 0           switch (opt) {
1276 0           case 1: /* REFLECT */
1277 0 0         if (j2<0)
1278 0           j2 = -j2-1;
1279 0 0         else if (j2 >= n_size)
1280 0           j2 = 2*n_size-(j2+1);
1281 0           break;
1282 0           case 2: /* TRUNCATE */
1283 0 0         if (j2<0 || j2 >= n_size)
    0          
1284 0           j2 = -1;
1285 0           break;
1286 0           case 3: /* REPLICATE */
1287 0 0         if (j2<0)
1288 0           j2 = 0;
1289 0 0         if (j2 >= n_size)
1290 0           j2 = n_size-1;
1291 0           break;
1292 0           default:
1293 0 0         REALMOD(j2,n_size);
    0          
1294             }
1295 0           mapj[j] = j2;
1296             }
1297              
1298             #line 331 "lib/PDL/Image2D.pd"
1299             PDL_BROADCASTLOOP_START_med2d_readdata
1300             #line 332 "lib/PDL/Image2D.pd"
1301             {/* 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) {
1302             #line 333 "lib/PDL/Image2D.pd"
1303             PDL_Indx count = 0;
1304             PDL_IF_BAD(int flag = 0;,)
1305             {/* Open q */ PDL_EXPAND2(register PDL_Indx q=0, __q_stop=(__q_size)); for(; q<__q_stop; q+=1) {
1306             #line 336 "lib/PDL/Image2D.pd"
1307             j2 = mapj[n-q];
1308             if (j2 >= 0)
1309             {/* Open p */ PDL_EXPAND2(register PDL_Indx p=0, __p_stop=(__p_size)); for(; p<__p_stop; p+=1) {
1310             #line 339 "lib/PDL/Image2D.pd"
1311             i2 = mapi[m-p];
1312             if (i2 >= 0) {
1313             PDL_LDouble kk = (kern_datap)[0+(__inc_kern_p*(p))+(__inc_kern_q*(q))], aa = (a_datap)[0+(__inc_a_m*(i2))+(__inc_a_n*(j2))];
1314             PDL_IF_BAD(if ( !PDL_ISBAD2(kk,kern_badval,E,kern_badval_isnan) && !PDL_ISBAD2(aa,a_badval,E,a_badval_isnan) ),) {
1315             PDL_IF_BAD(flag = 1;,)
1316             if ( kk > 0 )
1317             (tmp_datap)[0+(__inc_tmp_pq*(count++))] = aa * kk;
1318             }
1319             } /* if: i2 >= 0 */
1320             }} /* Close p */
1321             #line 349 "lib/PDL/Image2D.pd"
1322             }} /* Close q */
1323             #line 350 "lib/PDL/Image2D.pd"
1324             PDL_IF_BAD(if ( flag == 0 ) {
1325             (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))]=b_badval;
1326             } else,) {
1327             qsort_E( tmp_datap, 0, count-1 );
1328             (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))] = (tmp_datap)[0+(__inc_tmp_pq*((count-1)/2))];
1329             }
1330             }} /* Close n */}} /* Close m */
1331             #line 357 "lib/PDL/Image2D.pd"
1332             PDL_BROADCASTLOOP_END_med2d_readdata
1333             #line 1334 "lib/PDL/Image2D-pp-med2d.c"
1334             }
1335 0           } break;
1336 0           default: return PDL->make_error(PDL_EUSERERROR, "PP INTERNAL ERROR in med2d: unhandled datatype(%d), only handles (ABSULKNPQFDE)! PLEASE MAKE A BUG REPORT\n", __privtrans->__datatype);
1337             }
1338             #undef PDL_BAD_CODE
1339             #undef PDL_IF_BAD
1340             } else { /* ** else do 'good' Code ** */
1341             #define PDL_IF_BAD(t,f) f
1342 1           switch (__privtrans->__datatype) { /* Start generic switch */
1343 0           case PDL_SB: {
1344 0 0         PDL_DECLARE_PARAMS_med2d_1(PDL_SByte,A,PDL_Double,D,PDL_Indx,N,PDL_Indx,N)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
1345 0           {int i,j, i2,j2, poff, qoff;int opt = __params->opt;
1346 0           int m_size = __privtrans->ind_sizes[2];
1347 0           int n_size = __privtrans->ind_sizes[3];
1348 0           int p_size = __privtrans->ind_sizes[4];
1349 0           int q_size = __privtrans->ind_sizes[6];
1350            
1351 0           PDL_Indx *mapi = mapi_datap, *mapj = mapj_datap;
1352 0 0         if ((mapi==NULL) || (mapj==NULL)) return PDL->make_error(PDL_EUSERERROR, "Error in med2d:" "Out of Memory");
    0          
1353              
1354 0           poff = p_size/2; mapi += p_size-1;
1355 0           qoff = q_size/2; mapj += q_size-1;
1356 0 0         for ( i = 1-p_size; i< m_size; i++) {
1357 0           i2 = i + poff;
1358 0           switch (opt) {
1359 0           case 1: /* REFLECT */
1360 0 0         if (i2<0)
1361 0           i2 = -i2-1;
1362 0 0         else if (i2 >= m_size)
1363 0           i2 = 2*m_size-(i2+1);
1364 0           break;
1365 0           case 2: /* TRUNCATE */
1366 0 0         if (i2<0 || i2 >= m_size)
    0          
1367 0           i2 = -1;
1368 0           break;
1369 0           case 3: /* REPLICATE */
1370 0 0         if (i2<0)
1371 0           i2 = 0;
1372 0 0         if (i2 >= m_size)
1373 0           i2 = m_size-1;
1374 0           break;
1375 0           default:
1376 0 0         REALMOD(i2,m_size);
    0          
1377             }
1378 0           mapi[i] = i2;
1379             }
1380 0 0         for ( j = 1-q_size; j< n_size; j++) {
1381 0           j2 = j + qoff;
1382 0           switch (opt) {
1383 0           case 1: /* REFLECT */
1384 0 0         if (j2<0)
1385 0           j2 = -j2-1;
1386 0 0         else if (j2 >= n_size)
1387 0           j2 = 2*n_size-(j2+1);
1388 0           break;
1389 0           case 2: /* TRUNCATE */
1390 0 0         if (j2<0 || j2 >= n_size)
    0          
1391 0           j2 = -1;
1392 0           break;
1393 0           case 3: /* REPLICATE */
1394 0 0         if (j2<0)
1395 0           j2 = 0;
1396 0 0         if (j2 >= n_size)
1397 0           j2 = n_size-1;
1398 0           break;
1399 0           default:
1400 0 0         REALMOD(j2,n_size);
    0          
1401             }
1402 0           mapj[j] = j2;
1403             }
1404              
1405             #line 331 "lib/PDL/Image2D.pd"
1406             PDL_BROADCASTLOOP_START_med2d_readdata
1407             #line 332 "lib/PDL/Image2D.pd"
1408             {/* 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) {
1409             #line 333 "lib/PDL/Image2D.pd"
1410             PDL_Indx count = 0;
1411             PDL_IF_BAD(int flag = 0;,)
1412             {/* Open q */ PDL_EXPAND2(register PDL_Indx q=0, __q_stop=(__q_size)); for(; q<__q_stop; q+=1) {
1413             #line 336 "lib/PDL/Image2D.pd"
1414             j2 = mapj[n-q];
1415             if (j2 >= 0)
1416             {/* Open p */ PDL_EXPAND2(register PDL_Indx p=0, __p_stop=(__p_size)); for(; p<__p_stop; p+=1) {
1417             #line 339 "lib/PDL/Image2D.pd"
1418             i2 = mapi[m-p];
1419             if (i2 >= 0) {
1420             PDL_LDouble kk = (kern_datap)[0+(__inc_kern_p*(p))+(__inc_kern_q*(q))], aa = (a_datap)[0+(__inc_a_m*(i2))+(__inc_a_n*(j2))];
1421             PDL_IF_BAD(if ( !PDL_ISBAD2(kk,kern_badval,A,kern_badval_isnan) && !PDL_ISBAD2(aa,a_badval,A,a_badval_isnan) ),) {
1422             PDL_IF_BAD(flag = 1;,)
1423             if ( kk > 0 )
1424             (tmp_datap)[0+(__inc_tmp_pq*(count++))] = aa * kk;
1425             }
1426             } /* if: i2 >= 0 */
1427             }} /* Close p */
1428             #line 349 "lib/PDL/Image2D.pd"
1429             }} /* Close q */
1430             #line 350 "lib/PDL/Image2D.pd"
1431             PDL_IF_BAD(if ( flag == 0 ) {
1432             (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))]=b_badval;
1433             } else,) {
1434             qsort_D( tmp_datap, 0, count-1 );
1435             (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))] = (tmp_datap)[0+(__inc_tmp_pq*((count-1)/2))];
1436             }
1437             }} /* Close n */}} /* Close m */
1438             #line 357 "lib/PDL/Image2D.pd"
1439             PDL_BROADCASTLOOP_END_med2d_readdata
1440             #line 1441 "lib/PDL/Image2D-pp-med2d.c"
1441             }
1442 0           } break;
1443 0           case PDL_B: {
1444 0 0         PDL_DECLARE_PARAMS_med2d_1(PDL_Byte,B,PDL_Double,D,PDL_Indx,N,PDL_Indx,N)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
1445 0           {int i,j, i2,j2, poff, qoff;int opt = __params->opt;
1446 0           int m_size = __privtrans->ind_sizes[2];
1447 0           int n_size = __privtrans->ind_sizes[3];
1448 0           int p_size = __privtrans->ind_sizes[4];
1449 0           int q_size = __privtrans->ind_sizes[6];
1450            
1451 0           PDL_Indx *mapi = mapi_datap, *mapj = mapj_datap;
1452 0 0         if ((mapi==NULL) || (mapj==NULL)) return PDL->make_error(PDL_EUSERERROR, "Error in med2d:" "Out of Memory");
    0          
1453              
1454 0           poff = p_size/2; mapi += p_size-1;
1455 0           qoff = q_size/2; mapj += q_size-1;
1456 0 0         for ( i = 1-p_size; i< m_size; i++) {
1457 0           i2 = i + poff;
1458 0           switch (opt) {
1459 0           case 1: /* REFLECT */
1460 0 0         if (i2<0)
1461 0           i2 = -i2-1;
1462 0 0         else if (i2 >= m_size)
1463 0           i2 = 2*m_size-(i2+1);
1464 0           break;
1465 0           case 2: /* TRUNCATE */
1466 0 0         if (i2<0 || i2 >= m_size)
    0          
1467 0           i2 = -1;
1468 0           break;
1469 0           case 3: /* REPLICATE */
1470 0 0         if (i2<0)
1471 0           i2 = 0;
1472 0 0         if (i2 >= m_size)
1473 0           i2 = m_size-1;
1474 0           break;
1475 0           default:
1476 0 0         REALMOD(i2,m_size);
    0          
1477             }
1478 0           mapi[i] = i2;
1479             }
1480 0 0         for ( j = 1-q_size; j< n_size; j++) {
1481 0           j2 = j + qoff;
1482 0           switch (opt) {
1483 0           case 1: /* REFLECT */
1484 0 0         if (j2<0)
1485 0           j2 = -j2-1;
1486 0 0         else if (j2 >= n_size)
1487 0           j2 = 2*n_size-(j2+1);
1488 0           break;
1489 0           case 2: /* TRUNCATE */
1490 0 0         if (j2<0 || j2 >= n_size)
    0          
1491 0           j2 = -1;
1492 0           break;
1493 0           case 3: /* REPLICATE */
1494 0 0         if (j2<0)
1495 0           j2 = 0;
1496 0 0         if (j2 >= n_size)
1497 0           j2 = n_size-1;
1498 0           break;
1499 0           default:
1500 0 0         REALMOD(j2,n_size);
    0          
1501             }
1502 0           mapj[j] = j2;
1503             }
1504              
1505             #line 331 "lib/PDL/Image2D.pd"
1506             PDL_BROADCASTLOOP_START_med2d_readdata
1507             #line 332 "lib/PDL/Image2D.pd"
1508             {/* 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) {
1509             #line 333 "lib/PDL/Image2D.pd"
1510             PDL_Indx count = 0;
1511             PDL_IF_BAD(int flag = 0;,)
1512             {/* Open q */ PDL_EXPAND2(register PDL_Indx q=0, __q_stop=(__q_size)); for(; q<__q_stop; q+=1) {
1513             #line 336 "lib/PDL/Image2D.pd"
1514             j2 = mapj[n-q];
1515             if (j2 >= 0)
1516             {/* Open p */ PDL_EXPAND2(register PDL_Indx p=0, __p_stop=(__p_size)); for(; p<__p_stop; p+=1) {
1517             #line 339 "lib/PDL/Image2D.pd"
1518             i2 = mapi[m-p];
1519             if (i2 >= 0) {
1520             PDL_LDouble kk = (kern_datap)[0+(__inc_kern_p*(p))+(__inc_kern_q*(q))], aa = (a_datap)[0+(__inc_a_m*(i2))+(__inc_a_n*(j2))];
1521             PDL_IF_BAD(if ( !PDL_ISBAD2(kk,kern_badval,B,kern_badval_isnan) && !PDL_ISBAD2(aa,a_badval,B,a_badval_isnan) ),) {
1522             PDL_IF_BAD(flag = 1;,)
1523             if ( kk > 0 )
1524             (tmp_datap)[0+(__inc_tmp_pq*(count++))] = aa * kk;
1525             }
1526             } /* if: i2 >= 0 */
1527             }} /* Close p */
1528             #line 349 "lib/PDL/Image2D.pd"
1529             }} /* Close q */
1530             #line 350 "lib/PDL/Image2D.pd"
1531             PDL_IF_BAD(if ( flag == 0 ) {
1532             (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))]=b_badval;
1533             } else,) {
1534             qsort_D( tmp_datap, 0, count-1 );
1535             (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))] = (tmp_datap)[0+(__inc_tmp_pq*((count-1)/2))];
1536             }
1537             }} /* Close n */}} /* Close m */
1538             #line 357 "lib/PDL/Image2D.pd"
1539             PDL_BROADCASTLOOP_END_med2d_readdata
1540             #line 1541 "lib/PDL/Image2D-pp-med2d.c"
1541             }
1542 0           } break;
1543 0           case PDL_S: {
1544 0 0         PDL_DECLARE_PARAMS_med2d_1(PDL_Short,S,PDL_Double,D,PDL_Indx,N,PDL_Indx,N)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
1545 0           {int i,j, i2,j2, poff, qoff;int opt = __params->opt;
1546 0           int m_size = __privtrans->ind_sizes[2];
1547 0           int n_size = __privtrans->ind_sizes[3];
1548 0           int p_size = __privtrans->ind_sizes[4];
1549 0           int q_size = __privtrans->ind_sizes[6];
1550            
1551 0           PDL_Indx *mapi = mapi_datap, *mapj = mapj_datap;
1552 0 0         if ((mapi==NULL) || (mapj==NULL)) return PDL->make_error(PDL_EUSERERROR, "Error in med2d:" "Out of Memory");
    0          
1553              
1554 0           poff = p_size/2; mapi += p_size-1;
1555 0           qoff = q_size/2; mapj += q_size-1;
1556 0 0         for ( i = 1-p_size; i< m_size; i++) {
1557 0           i2 = i + poff;
1558 0           switch (opt) {
1559 0           case 1: /* REFLECT */
1560 0 0         if (i2<0)
1561 0           i2 = -i2-1;
1562 0 0         else if (i2 >= m_size)
1563 0           i2 = 2*m_size-(i2+1);
1564 0           break;
1565 0           case 2: /* TRUNCATE */
1566 0 0         if (i2<0 || i2 >= m_size)
    0          
1567 0           i2 = -1;
1568 0           break;
1569 0           case 3: /* REPLICATE */
1570 0 0         if (i2<0)
1571 0           i2 = 0;
1572 0 0         if (i2 >= m_size)
1573 0           i2 = m_size-1;
1574 0           break;
1575 0           default:
1576 0 0         REALMOD(i2,m_size);
    0          
1577             }
1578 0           mapi[i] = i2;
1579             }
1580 0 0         for ( j = 1-q_size; j< n_size; j++) {
1581 0           j2 = j + qoff;
1582 0           switch (opt) {
1583 0           case 1: /* REFLECT */
1584 0 0         if (j2<0)
1585 0           j2 = -j2-1;
1586 0 0         else if (j2 >= n_size)
1587 0           j2 = 2*n_size-(j2+1);
1588 0           break;
1589 0           case 2: /* TRUNCATE */
1590 0 0         if (j2<0 || j2 >= n_size)
    0          
1591 0           j2 = -1;
1592 0           break;
1593 0           case 3: /* REPLICATE */
1594 0 0         if (j2<0)
1595 0           j2 = 0;
1596 0 0         if (j2 >= n_size)
1597 0           j2 = n_size-1;
1598 0           break;
1599 0           default:
1600 0 0         REALMOD(j2,n_size);
    0          
1601             }
1602 0           mapj[j] = j2;
1603             }
1604              
1605             #line 331 "lib/PDL/Image2D.pd"
1606             PDL_BROADCASTLOOP_START_med2d_readdata
1607             #line 332 "lib/PDL/Image2D.pd"
1608             {/* 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) {
1609             #line 333 "lib/PDL/Image2D.pd"
1610             PDL_Indx count = 0;
1611             PDL_IF_BAD(int flag = 0;,)
1612             {/* Open q */ PDL_EXPAND2(register PDL_Indx q=0, __q_stop=(__q_size)); for(; q<__q_stop; q+=1) {
1613             #line 336 "lib/PDL/Image2D.pd"
1614             j2 = mapj[n-q];
1615             if (j2 >= 0)
1616             {/* Open p */ PDL_EXPAND2(register PDL_Indx p=0, __p_stop=(__p_size)); for(; p<__p_stop; p+=1) {
1617             #line 339 "lib/PDL/Image2D.pd"
1618             i2 = mapi[m-p];
1619             if (i2 >= 0) {
1620             PDL_LDouble kk = (kern_datap)[0+(__inc_kern_p*(p))+(__inc_kern_q*(q))], aa = (a_datap)[0+(__inc_a_m*(i2))+(__inc_a_n*(j2))];
1621             PDL_IF_BAD(if ( !PDL_ISBAD2(kk,kern_badval,S,kern_badval_isnan) && !PDL_ISBAD2(aa,a_badval,S,a_badval_isnan) ),) {
1622             PDL_IF_BAD(flag = 1;,)
1623             if ( kk > 0 )
1624             (tmp_datap)[0+(__inc_tmp_pq*(count++))] = aa * kk;
1625             }
1626             } /* if: i2 >= 0 */
1627             }} /* Close p */
1628             #line 349 "lib/PDL/Image2D.pd"
1629             }} /* Close q */
1630             #line 350 "lib/PDL/Image2D.pd"
1631             PDL_IF_BAD(if ( flag == 0 ) {
1632             (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))]=b_badval;
1633             } else,) {
1634             qsort_D( tmp_datap, 0, count-1 );
1635             (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))] = (tmp_datap)[0+(__inc_tmp_pq*((count-1)/2))];
1636             }
1637             }} /* Close n */}} /* Close m */
1638             #line 357 "lib/PDL/Image2D.pd"
1639             PDL_BROADCASTLOOP_END_med2d_readdata
1640             #line 1641 "lib/PDL/Image2D-pp-med2d.c"
1641             }
1642 0           } break;
1643 0           case PDL_US: {
1644 0 0         PDL_DECLARE_PARAMS_med2d_1(PDL_Ushort,U,PDL_Double,D,PDL_Indx,N,PDL_Indx,N)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
1645 0           {int i,j, i2,j2, poff, qoff;int opt = __params->opt;
1646 0           int m_size = __privtrans->ind_sizes[2];
1647 0           int n_size = __privtrans->ind_sizes[3];
1648 0           int p_size = __privtrans->ind_sizes[4];
1649 0           int q_size = __privtrans->ind_sizes[6];
1650            
1651 0           PDL_Indx *mapi = mapi_datap, *mapj = mapj_datap;
1652 0 0         if ((mapi==NULL) || (mapj==NULL)) return PDL->make_error(PDL_EUSERERROR, "Error in med2d:" "Out of Memory");
    0          
1653              
1654 0           poff = p_size/2; mapi += p_size-1;
1655 0           qoff = q_size/2; mapj += q_size-1;
1656 0 0         for ( i = 1-p_size; i< m_size; i++) {
1657 0           i2 = i + poff;
1658 0           switch (opt) {
1659 0           case 1: /* REFLECT */
1660 0 0         if (i2<0)
1661 0           i2 = -i2-1;
1662 0 0         else if (i2 >= m_size)
1663 0           i2 = 2*m_size-(i2+1);
1664 0           break;
1665 0           case 2: /* TRUNCATE */
1666 0 0         if (i2<0 || i2 >= m_size)
    0          
1667 0           i2 = -1;
1668 0           break;
1669 0           case 3: /* REPLICATE */
1670 0 0         if (i2<0)
1671 0           i2 = 0;
1672 0 0         if (i2 >= m_size)
1673 0           i2 = m_size-1;
1674 0           break;
1675 0           default:
1676 0 0         REALMOD(i2,m_size);
    0          
1677             }
1678 0           mapi[i] = i2;
1679             }
1680 0 0         for ( j = 1-q_size; j< n_size; j++) {
1681 0           j2 = j + qoff;
1682 0           switch (opt) {
1683 0           case 1: /* REFLECT */
1684 0 0         if (j2<0)
1685 0           j2 = -j2-1;
1686 0 0         else if (j2 >= n_size)
1687 0           j2 = 2*n_size-(j2+1);
1688 0           break;
1689 0           case 2: /* TRUNCATE */
1690 0 0         if (j2<0 || j2 >= n_size)
    0          
1691 0           j2 = -1;
1692 0           break;
1693 0           case 3: /* REPLICATE */
1694 0 0         if (j2<0)
1695 0           j2 = 0;
1696 0 0         if (j2 >= n_size)
1697 0           j2 = n_size-1;
1698 0           break;
1699 0           default:
1700 0 0         REALMOD(j2,n_size);
    0          
1701             }
1702 0           mapj[j] = j2;
1703             }
1704              
1705             #line 331 "lib/PDL/Image2D.pd"
1706             PDL_BROADCASTLOOP_START_med2d_readdata
1707             #line 332 "lib/PDL/Image2D.pd"
1708             {/* 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) {
1709             #line 333 "lib/PDL/Image2D.pd"
1710             PDL_Indx count = 0;
1711             PDL_IF_BAD(int flag = 0;,)
1712             {/* Open q */ PDL_EXPAND2(register PDL_Indx q=0, __q_stop=(__q_size)); for(; q<__q_stop; q+=1) {
1713             #line 336 "lib/PDL/Image2D.pd"
1714             j2 = mapj[n-q];
1715             if (j2 >= 0)
1716             {/* Open p */ PDL_EXPAND2(register PDL_Indx p=0, __p_stop=(__p_size)); for(; p<__p_stop; p+=1) {
1717             #line 339 "lib/PDL/Image2D.pd"
1718             i2 = mapi[m-p];
1719             if (i2 >= 0) {
1720             PDL_LDouble kk = (kern_datap)[0+(__inc_kern_p*(p))+(__inc_kern_q*(q))], aa = (a_datap)[0+(__inc_a_m*(i2))+(__inc_a_n*(j2))];
1721             PDL_IF_BAD(if ( !PDL_ISBAD2(kk,kern_badval,U,kern_badval_isnan) && !PDL_ISBAD2(aa,a_badval,U,a_badval_isnan) ),) {
1722             PDL_IF_BAD(flag = 1;,)
1723             if ( kk > 0 )
1724             (tmp_datap)[0+(__inc_tmp_pq*(count++))] = aa * kk;
1725             }
1726             } /* if: i2 >= 0 */
1727             }} /* Close p */
1728             #line 349 "lib/PDL/Image2D.pd"
1729             }} /* Close q */
1730             #line 350 "lib/PDL/Image2D.pd"
1731             PDL_IF_BAD(if ( flag == 0 ) {
1732             (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))]=b_badval;
1733             } else,) {
1734             qsort_D( tmp_datap, 0, count-1 );
1735             (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))] = (tmp_datap)[0+(__inc_tmp_pq*((count-1)/2))];
1736             }
1737             }} /* Close n */}} /* Close m */
1738             #line 357 "lib/PDL/Image2D.pd"
1739             PDL_BROADCASTLOOP_END_med2d_readdata
1740             #line 1741 "lib/PDL/Image2D-pp-med2d.c"
1741             }
1742 0           } break;
1743 0           case PDL_L: {
1744 0 0         PDL_DECLARE_PARAMS_med2d_1(PDL_Long,L,PDL_Double,D,PDL_Indx,N,PDL_Indx,N)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
1745 0           {int i,j, i2,j2, poff, qoff;int opt = __params->opt;
1746 0           int m_size = __privtrans->ind_sizes[2];
1747 0           int n_size = __privtrans->ind_sizes[3];
1748 0           int p_size = __privtrans->ind_sizes[4];
1749 0           int q_size = __privtrans->ind_sizes[6];
1750            
1751 0           PDL_Indx *mapi = mapi_datap, *mapj = mapj_datap;
1752 0 0         if ((mapi==NULL) || (mapj==NULL)) return PDL->make_error(PDL_EUSERERROR, "Error in med2d:" "Out of Memory");
    0          
1753              
1754 0           poff = p_size/2; mapi += p_size-1;
1755 0           qoff = q_size/2; mapj += q_size-1;
1756 0 0         for ( i = 1-p_size; i< m_size; i++) {
1757 0           i2 = i + poff;
1758 0           switch (opt) {
1759 0           case 1: /* REFLECT */
1760 0 0         if (i2<0)
1761 0           i2 = -i2-1;
1762 0 0         else if (i2 >= m_size)
1763 0           i2 = 2*m_size-(i2+1);
1764 0           break;
1765 0           case 2: /* TRUNCATE */
1766 0 0         if (i2<0 || i2 >= m_size)
    0          
1767 0           i2 = -1;
1768 0           break;
1769 0           case 3: /* REPLICATE */
1770 0 0         if (i2<0)
1771 0           i2 = 0;
1772 0 0         if (i2 >= m_size)
1773 0           i2 = m_size-1;
1774 0           break;
1775 0           default:
1776 0 0         REALMOD(i2,m_size);
    0          
1777             }
1778 0           mapi[i] = i2;
1779             }
1780 0 0         for ( j = 1-q_size; j< n_size; j++) {
1781 0           j2 = j + qoff;
1782 0           switch (opt) {
1783 0           case 1: /* REFLECT */
1784 0 0         if (j2<0)
1785 0           j2 = -j2-1;
1786 0 0         else if (j2 >= n_size)
1787 0           j2 = 2*n_size-(j2+1);
1788 0           break;
1789 0           case 2: /* TRUNCATE */
1790 0 0         if (j2<0 || j2 >= n_size)
    0          
1791 0           j2 = -1;
1792 0           break;
1793 0           case 3: /* REPLICATE */
1794 0 0         if (j2<0)
1795 0           j2 = 0;
1796 0 0         if (j2 >= n_size)
1797 0           j2 = n_size-1;
1798 0           break;
1799 0           default:
1800 0 0         REALMOD(j2,n_size);
    0          
1801             }
1802 0           mapj[j] = j2;
1803             }
1804              
1805             #line 331 "lib/PDL/Image2D.pd"
1806             PDL_BROADCASTLOOP_START_med2d_readdata
1807             #line 332 "lib/PDL/Image2D.pd"
1808             {/* 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) {
1809             #line 333 "lib/PDL/Image2D.pd"
1810             PDL_Indx count = 0;
1811             PDL_IF_BAD(int flag = 0;,)
1812             {/* Open q */ PDL_EXPAND2(register PDL_Indx q=0, __q_stop=(__q_size)); for(; q<__q_stop; q+=1) {
1813             #line 336 "lib/PDL/Image2D.pd"
1814             j2 = mapj[n-q];
1815             if (j2 >= 0)
1816             {/* Open p */ PDL_EXPAND2(register PDL_Indx p=0, __p_stop=(__p_size)); for(; p<__p_stop; p+=1) {
1817             #line 339 "lib/PDL/Image2D.pd"
1818             i2 = mapi[m-p];
1819             if (i2 >= 0) {
1820             PDL_LDouble kk = (kern_datap)[0+(__inc_kern_p*(p))+(__inc_kern_q*(q))], aa = (a_datap)[0+(__inc_a_m*(i2))+(__inc_a_n*(j2))];
1821             PDL_IF_BAD(if ( !PDL_ISBAD2(kk,kern_badval,L,kern_badval_isnan) && !PDL_ISBAD2(aa,a_badval,L,a_badval_isnan) ),) {
1822             PDL_IF_BAD(flag = 1;,)
1823             if ( kk > 0 )
1824             (tmp_datap)[0+(__inc_tmp_pq*(count++))] = aa * kk;
1825             }
1826             } /* if: i2 >= 0 */
1827             }} /* Close p */
1828             #line 349 "lib/PDL/Image2D.pd"
1829             }} /* Close q */
1830             #line 350 "lib/PDL/Image2D.pd"
1831             PDL_IF_BAD(if ( flag == 0 ) {
1832             (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))]=b_badval;
1833             } else,) {
1834             qsort_D( tmp_datap, 0, count-1 );
1835             (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))] = (tmp_datap)[0+(__inc_tmp_pq*((count-1)/2))];
1836             }
1837             }} /* Close n */}} /* Close m */
1838             #line 357 "lib/PDL/Image2D.pd"
1839             PDL_BROADCASTLOOP_END_med2d_readdata
1840             #line 1841 "lib/PDL/Image2D-pp-med2d.c"
1841             }
1842 0           } break;
1843 0           case PDL_UL: {
1844 0 0         PDL_DECLARE_PARAMS_med2d_1(PDL_ULong,K,PDL_Double,D,PDL_Indx,N,PDL_Indx,N)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
1845 0           {int i,j, i2,j2, poff, qoff;int opt = __params->opt;
1846 0           int m_size = __privtrans->ind_sizes[2];
1847 0           int n_size = __privtrans->ind_sizes[3];
1848 0           int p_size = __privtrans->ind_sizes[4];
1849 0           int q_size = __privtrans->ind_sizes[6];
1850            
1851 0           PDL_Indx *mapi = mapi_datap, *mapj = mapj_datap;
1852 0 0         if ((mapi==NULL) || (mapj==NULL)) return PDL->make_error(PDL_EUSERERROR, "Error in med2d:" "Out of Memory");
    0          
1853              
1854 0           poff = p_size/2; mapi += p_size-1;
1855 0           qoff = q_size/2; mapj += q_size-1;
1856 0 0         for ( i = 1-p_size; i< m_size; i++) {
1857 0           i2 = i + poff;
1858 0           switch (opt) {
1859 0           case 1: /* REFLECT */
1860 0 0         if (i2<0)
1861 0           i2 = -i2-1;
1862 0 0         else if (i2 >= m_size)
1863 0           i2 = 2*m_size-(i2+1);
1864 0           break;
1865 0           case 2: /* TRUNCATE */
1866 0 0         if (i2<0 || i2 >= m_size)
    0          
1867 0           i2 = -1;
1868 0           break;
1869 0           case 3: /* REPLICATE */
1870 0 0         if (i2<0)
1871 0           i2 = 0;
1872 0 0         if (i2 >= m_size)
1873 0           i2 = m_size-1;
1874 0           break;
1875 0           default:
1876 0 0         REALMOD(i2,m_size);
    0          
1877             }
1878 0           mapi[i] = i2;
1879             }
1880 0 0         for ( j = 1-q_size; j< n_size; j++) {
1881 0           j2 = j + qoff;
1882 0           switch (opt) {
1883 0           case 1: /* REFLECT */
1884 0 0         if (j2<0)
1885 0           j2 = -j2-1;
1886 0 0         else if (j2 >= n_size)
1887 0           j2 = 2*n_size-(j2+1);
1888 0           break;
1889 0           case 2: /* TRUNCATE */
1890 0 0         if (j2<0 || j2 >= n_size)
    0          
1891 0           j2 = -1;
1892 0           break;
1893 0           case 3: /* REPLICATE */
1894 0 0         if (j2<0)
1895 0           j2 = 0;
1896 0 0         if (j2 >= n_size)
1897 0           j2 = n_size-1;
1898 0           break;
1899 0           default:
1900 0 0         REALMOD(j2,n_size);
    0          
1901             }
1902 0           mapj[j] = j2;
1903             }
1904              
1905             #line 331 "lib/PDL/Image2D.pd"
1906             PDL_BROADCASTLOOP_START_med2d_readdata
1907             #line 332 "lib/PDL/Image2D.pd"
1908             {/* 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) {
1909             #line 333 "lib/PDL/Image2D.pd"
1910             PDL_Indx count = 0;
1911             PDL_IF_BAD(int flag = 0;,)
1912             {/* Open q */ PDL_EXPAND2(register PDL_Indx q=0, __q_stop=(__q_size)); for(; q<__q_stop; q+=1) {
1913             #line 336 "lib/PDL/Image2D.pd"
1914             j2 = mapj[n-q];
1915             if (j2 >= 0)
1916             {/* Open p */ PDL_EXPAND2(register PDL_Indx p=0, __p_stop=(__p_size)); for(; p<__p_stop; p+=1) {
1917             #line 339 "lib/PDL/Image2D.pd"
1918             i2 = mapi[m-p];
1919             if (i2 >= 0) {
1920             PDL_LDouble kk = (kern_datap)[0+(__inc_kern_p*(p))+(__inc_kern_q*(q))], aa = (a_datap)[0+(__inc_a_m*(i2))+(__inc_a_n*(j2))];
1921             PDL_IF_BAD(if ( !PDL_ISBAD2(kk,kern_badval,K,kern_badval_isnan) && !PDL_ISBAD2(aa,a_badval,K,a_badval_isnan) ),) {
1922             PDL_IF_BAD(flag = 1;,)
1923             if ( kk > 0 )
1924             (tmp_datap)[0+(__inc_tmp_pq*(count++))] = aa * kk;
1925             }
1926             } /* if: i2 >= 0 */
1927             }} /* Close p */
1928             #line 349 "lib/PDL/Image2D.pd"
1929             }} /* Close q */
1930             #line 350 "lib/PDL/Image2D.pd"
1931             PDL_IF_BAD(if ( flag == 0 ) {
1932             (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))]=b_badval;
1933             } else,) {
1934             qsort_D( tmp_datap, 0, count-1 );
1935             (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))] = (tmp_datap)[0+(__inc_tmp_pq*((count-1)/2))];
1936             }
1937             }} /* Close n */}} /* Close m */
1938             #line 357 "lib/PDL/Image2D.pd"
1939             PDL_BROADCASTLOOP_END_med2d_readdata
1940             #line 1941 "lib/PDL/Image2D-pp-med2d.c"
1941             }
1942 0           } break;
1943 0           case PDL_IND: {
1944 0 0         PDL_DECLARE_PARAMS_med2d_1(PDL_Indx,N,PDL_Double,D,PDL_Indx,N,PDL_Indx,N)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
1945 0           {int i,j, i2,j2, poff, qoff;int opt = __params->opt;
1946 0           int m_size = __privtrans->ind_sizes[2];
1947 0           int n_size = __privtrans->ind_sizes[3];
1948 0           int p_size = __privtrans->ind_sizes[4];
1949 0           int q_size = __privtrans->ind_sizes[6];
1950            
1951 0           PDL_Indx *mapi = mapi_datap, *mapj = mapj_datap;
1952 0 0         if ((mapi==NULL) || (mapj==NULL)) return PDL->make_error(PDL_EUSERERROR, "Error in med2d:" "Out of Memory");
    0          
1953              
1954 0           poff = p_size/2; mapi += p_size-1;
1955 0           qoff = q_size/2; mapj += q_size-1;
1956 0 0         for ( i = 1-p_size; i< m_size; i++) {
1957 0           i2 = i + poff;
1958 0           switch (opt) {
1959 0           case 1: /* REFLECT */
1960 0 0         if (i2<0)
1961 0           i2 = -i2-1;
1962 0 0         else if (i2 >= m_size)
1963 0           i2 = 2*m_size-(i2+1);
1964 0           break;
1965 0           case 2: /* TRUNCATE */
1966 0 0         if (i2<0 || i2 >= m_size)
    0          
1967 0           i2 = -1;
1968 0           break;
1969 0           case 3: /* REPLICATE */
1970 0 0         if (i2<0)
1971 0           i2 = 0;
1972 0 0         if (i2 >= m_size)
1973 0           i2 = m_size-1;
1974 0           break;
1975 0           default:
1976 0 0         REALMOD(i2,m_size);
    0          
1977             }
1978 0           mapi[i] = i2;
1979             }
1980 0 0         for ( j = 1-q_size; j< n_size; j++) {
1981 0           j2 = j + qoff;
1982 0           switch (opt) {
1983 0           case 1: /* REFLECT */
1984 0 0         if (j2<0)
1985 0           j2 = -j2-1;
1986 0 0         else if (j2 >= n_size)
1987 0           j2 = 2*n_size-(j2+1);
1988 0           break;
1989 0           case 2: /* TRUNCATE */
1990 0 0         if (j2<0 || j2 >= n_size)
    0          
1991 0           j2 = -1;
1992 0           break;
1993 0           case 3: /* REPLICATE */
1994 0 0         if (j2<0)
1995 0           j2 = 0;
1996 0 0         if (j2 >= n_size)
1997 0           j2 = n_size-1;
1998 0           break;
1999 0           default:
2000 0 0         REALMOD(j2,n_size);
    0          
2001             }
2002 0           mapj[j] = j2;
2003             }
2004              
2005             #line 331 "lib/PDL/Image2D.pd"
2006             PDL_BROADCASTLOOP_START_med2d_readdata
2007             #line 332 "lib/PDL/Image2D.pd"
2008             {/* 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) {
2009             #line 333 "lib/PDL/Image2D.pd"
2010             PDL_Indx count = 0;
2011             PDL_IF_BAD(int flag = 0;,)
2012             {/* Open q */ PDL_EXPAND2(register PDL_Indx q=0, __q_stop=(__q_size)); for(; q<__q_stop; q+=1) {
2013             #line 336 "lib/PDL/Image2D.pd"
2014             j2 = mapj[n-q];
2015             if (j2 >= 0)
2016             {/* Open p */ PDL_EXPAND2(register PDL_Indx p=0, __p_stop=(__p_size)); for(; p<__p_stop; p+=1) {
2017             #line 339 "lib/PDL/Image2D.pd"
2018             i2 = mapi[m-p];
2019             if (i2 >= 0) {
2020             PDL_LDouble kk = (kern_datap)[0+(__inc_kern_p*(p))+(__inc_kern_q*(q))], aa = (a_datap)[0+(__inc_a_m*(i2))+(__inc_a_n*(j2))];
2021             PDL_IF_BAD(if ( !PDL_ISBAD2(kk,kern_badval,N,kern_badval_isnan) && !PDL_ISBAD2(aa,a_badval,N,a_badval_isnan) ),) {
2022             PDL_IF_BAD(flag = 1;,)
2023             if ( kk > 0 )
2024             (tmp_datap)[0+(__inc_tmp_pq*(count++))] = aa * kk;
2025             }
2026             } /* if: i2 >= 0 */
2027             }} /* Close p */
2028             #line 349 "lib/PDL/Image2D.pd"
2029             }} /* Close q */
2030             #line 350 "lib/PDL/Image2D.pd"
2031             PDL_IF_BAD(if ( flag == 0 ) {
2032             (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))]=b_badval;
2033             } else,) {
2034             qsort_D( tmp_datap, 0, count-1 );
2035             (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))] = (tmp_datap)[0+(__inc_tmp_pq*((count-1)/2))];
2036             }
2037             }} /* Close n */}} /* Close m */
2038             #line 357 "lib/PDL/Image2D.pd"
2039             PDL_BROADCASTLOOP_END_med2d_readdata
2040             #line 2041 "lib/PDL/Image2D-pp-med2d.c"
2041             }
2042 0           } break;
2043 0           case PDL_ULL: {
2044 0 0         PDL_DECLARE_PARAMS_med2d_1(PDL_ULongLong,P,PDL_Double,D,PDL_Indx,N,PDL_Indx,N)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
2045 0           {int i,j, i2,j2, poff, qoff;int opt = __params->opt;
2046 0           int m_size = __privtrans->ind_sizes[2];
2047 0           int n_size = __privtrans->ind_sizes[3];
2048 0           int p_size = __privtrans->ind_sizes[4];
2049 0           int q_size = __privtrans->ind_sizes[6];
2050            
2051 0           PDL_Indx *mapi = mapi_datap, *mapj = mapj_datap;
2052 0 0         if ((mapi==NULL) || (mapj==NULL)) return PDL->make_error(PDL_EUSERERROR, "Error in med2d:" "Out of Memory");
    0          
2053              
2054 0           poff = p_size/2; mapi += p_size-1;
2055 0           qoff = q_size/2; mapj += q_size-1;
2056 0 0         for ( i = 1-p_size; i< m_size; i++) {
2057 0           i2 = i + poff;
2058 0           switch (opt) {
2059 0           case 1: /* REFLECT */
2060 0 0         if (i2<0)
2061 0           i2 = -i2-1;
2062 0 0         else if (i2 >= m_size)
2063 0           i2 = 2*m_size-(i2+1);
2064 0           break;
2065 0           case 2: /* TRUNCATE */
2066 0 0         if (i2<0 || i2 >= m_size)
    0          
2067 0           i2 = -1;
2068 0           break;
2069 0           case 3: /* REPLICATE */
2070 0 0         if (i2<0)
2071 0           i2 = 0;
2072 0 0         if (i2 >= m_size)
2073 0           i2 = m_size-1;
2074 0           break;
2075 0           default:
2076 0 0         REALMOD(i2,m_size);
    0          
2077             }
2078 0           mapi[i] = i2;
2079             }
2080 0 0         for ( j = 1-q_size; j< n_size; j++) {
2081 0           j2 = j + qoff;
2082 0           switch (opt) {
2083 0           case 1: /* REFLECT */
2084 0 0         if (j2<0)
2085 0           j2 = -j2-1;
2086 0 0         else if (j2 >= n_size)
2087 0           j2 = 2*n_size-(j2+1);
2088 0           break;
2089 0           case 2: /* TRUNCATE */
2090 0 0         if (j2<0 || j2 >= n_size)
    0          
2091 0           j2 = -1;
2092 0           break;
2093 0           case 3: /* REPLICATE */
2094 0 0         if (j2<0)
2095 0           j2 = 0;
2096 0 0         if (j2 >= n_size)
2097 0           j2 = n_size-1;
2098 0           break;
2099 0           default:
2100 0 0         REALMOD(j2,n_size);
    0          
2101             }
2102 0           mapj[j] = j2;
2103             }
2104              
2105             #line 331 "lib/PDL/Image2D.pd"
2106             PDL_BROADCASTLOOP_START_med2d_readdata
2107             #line 332 "lib/PDL/Image2D.pd"
2108             {/* 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) {
2109             #line 333 "lib/PDL/Image2D.pd"
2110             PDL_Indx count = 0;
2111             PDL_IF_BAD(int flag = 0;,)
2112             {/* Open q */ PDL_EXPAND2(register PDL_Indx q=0, __q_stop=(__q_size)); for(; q<__q_stop; q+=1) {
2113             #line 336 "lib/PDL/Image2D.pd"
2114             j2 = mapj[n-q];
2115             if (j2 >= 0)
2116             {/* Open p */ PDL_EXPAND2(register PDL_Indx p=0, __p_stop=(__p_size)); for(; p<__p_stop; p+=1) {
2117             #line 339 "lib/PDL/Image2D.pd"
2118             i2 = mapi[m-p];
2119             if (i2 >= 0) {
2120             PDL_LDouble kk = (kern_datap)[0+(__inc_kern_p*(p))+(__inc_kern_q*(q))], aa = (a_datap)[0+(__inc_a_m*(i2))+(__inc_a_n*(j2))];
2121             PDL_IF_BAD(if ( !PDL_ISBAD2(kk,kern_badval,P,kern_badval_isnan) && !PDL_ISBAD2(aa,a_badval,P,a_badval_isnan) ),) {
2122             PDL_IF_BAD(flag = 1;,)
2123             if ( kk > 0 )
2124             (tmp_datap)[0+(__inc_tmp_pq*(count++))] = aa * kk;
2125             }
2126             } /* if: i2 >= 0 */
2127             }} /* Close p */
2128             #line 349 "lib/PDL/Image2D.pd"
2129             }} /* Close q */
2130             #line 350 "lib/PDL/Image2D.pd"
2131             PDL_IF_BAD(if ( flag == 0 ) {
2132             (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))]=b_badval;
2133             } else,) {
2134             qsort_D( tmp_datap, 0, count-1 );
2135             (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))] = (tmp_datap)[0+(__inc_tmp_pq*((count-1)/2))];
2136             }
2137             }} /* Close n */}} /* Close m */
2138             #line 357 "lib/PDL/Image2D.pd"
2139             PDL_BROADCASTLOOP_END_med2d_readdata
2140             #line 2141 "lib/PDL/Image2D-pp-med2d.c"
2141             }
2142 0           } break;
2143 0           case PDL_LL: {
2144 0 0         PDL_DECLARE_PARAMS_med2d_1(PDL_LongLong,Q,PDL_Double,D,PDL_Indx,N,PDL_Indx,N)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
2145 0           {int i,j, i2,j2, poff, qoff;int opt = __params->opt;
2146 0           int m_size = __privtrans->ind_sizes[2];
2147 0           int n_size = __privtrans->ind_sizes[3];
2148 0           int p_size = __privtrans->ind_sizes[4];
2149 0           int q_size = __privtrans->ind_sizes[6];
2150            
2151 0           PDL_Indx *mapi = mapi_datap, *mapj = mapj_datap;
2152 0 0         if ((mapi==NULL) || (mapj==NULL)) return PDL->make_error(PDL_EUSERERROR, "Error in med2d:" "Out of Memory");
    0          
2153              
2154 0           poff = p_size/2; mapi += p_size-1;
2155 0           qoff = q_size/2; mapj += q_size-1;
2156 0 0         for ( i = 1-p_size; i< m_size; i++) {
2157 0           i2 = i + poff;
2158 0           switch (opt) {
2159 0           case 1: /* REFLECT */
2160 0 0         if (i2<0)
2161 0           i2 = -i2-1;
2162 0 0         else if (i2 >= m_size)
2163 0           i2 = 2*m_size-(i2+1);
2164 0           break;
2165 0           case 2: /* TRUNCATE */
2166 0 0         if (i2<0 || i2 >= m_size)
    0          
2167 0           i2 = -1;
2168 0           break;
2169 0           case 3: /* REPLICATE */
2170 0 0         if (i2<0)
2171 0           i2 = 0;
2172 0 0         if (i2 >= m_size)
2173 0           i2 = m_size-1;
2174 0           break;
2175 0           default:
2176 0 0         REALMOD(i2,m_size);
    0          
2177             }
2178 0           mapi[i] = i2;
2179             }
2180 0 0         for ( j = 1-q_size; j< n_size; j++) {
2181 0           j2 = j + qoff;
2182 0           switch (opt) {
2183 0           case 1: /* REFLECT */
2184 0 0         if (j2<0)
2185 0           j2 = -j2-1;
2186 0 0         else if (j2 >= n_size)
2187 0           j2 = 2*n_size-(j2+1);
2188 0           break;
2189 0           case 2: /* TRUNCATE */
2190 0 0         if (j2<0 || j2 >= n_size)
    0          
2191 0           j2 = -1;
2192 0           break;
2193 0           case 3: /* REPLICATE */
2194 0 0         if (j2<0)
2195 0           j2 = 0;
2196 0 0         if (j2 >= n_size)
2197 0           j2 = n_size-1;
2198 0           break;
2199 0           default:
2200 0 0         REALMOD(j2,n_size);
    0          
2201             }
2202 0           mapj[j] = j2;
2203             }
2204              
2205             #line 331 "lib/PDL/Image2D.pd"
2206             PDL_BROADCASTLOOP_START_med2d_readdata
2207             #line 332 "lib/PDL/Image2D.pd"
2208             {/* 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) {
2209             #line 333 "lib/PDL/Image2D.pd"
2210             PDL_Indx count = 0;
2211             PDL_IF_BAD(int flag = 0;,)
2212             {/* Open q */ PDL_EXPAND2(register PDL_Indx q=0, __q_stop=(__q_size)); for(; q<__q_stop; q+=1) {
2213             #line 336 "lib/PDL/Image2D.pd"
2214             j2 = mapj[n-q];
2215             if (j2 >= 0)
2216             {/* Open p */ PDL_EXPAND2(register PDL_Indx p=0, __p_stop=(__p_size)); for(; p<__p_stop; p+=1) {
2217             #line 339 "lib/PDL/Image2D.pd"
2218             i2 = mapi[m-p];
2219             if (i2 >= 0) {
2220             PDL_LDouble kk = (kern_datap)[0+(__inc_kern_p*(p))+(__inc_kern_q*(q))], aa = (a_datap)[0+(__inc_a_m*(i2))+(__inc_a_n*(j2))];
2221             PDL_IF_BAD(if ( !PDL_ISBAD2(kk,kern_badval,Q,kern_badval_isnan) && !PDL_ISBAD2(aa,a_badval,Q,a_badval_isnan) ),) {
2222             PDL_IF_BAD(flag = 1;,)
2223             if ( kk > 0 )
2224             (tmp_datap)[0+(__inc_tmp_pq*(count++))] = aa * kk;
2225             }
2226             } /* if: i2 >= 0 */
2227             }} /* Close p */
2228             #line 349 "lib/PDL/Image2D.pd"
2229             }} /* Close q */
2230             #line 350 "lib/PDL/Image2D.pd"
2231             PDL_IF_BAD(if ( flag == 0 ) {
2232             (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))]=b_badval;
2233             } else,) {
2234             qsort_D( tmp_datap, 0, count-1 );
2235             (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))] = (tmp_datap)[0+(__inc_tmp_pq*((count-1)/2))];
2236             }
2237             }} /* Close n */}} /* Close m */
2238             #line 357 "lib/PDL/Image2D.pd"
2239             PDL_BROADCASTLOOP_END_med2d_readdata
2240             #line 2241 "lib/PDL/Image2D-pp-med2d.c"
2241             }
2242 0           } break;
2243 0           case PDL_F: {
2244 0 0         PDL_DECLARE_PARAMS_med2d_1(PDL_Float,F,PDL_Double,D,PDL_Indx,N,PDL_Indx,N)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
2245 0           {int i,j, i2,j2, poff, qoff;int opt = __params->opt;
2246 0           int m_size = __privtrans->ind_sizes[2];
2247 0           int n_size = __privtrans->ind_sizes[3];
2248 0           int p_size = __privtrans->ind_sizes[4];
2249 0           int q_size = __privtrans->ind_sizes[6];
2250            
2251 0           PDL_Indx *mapi = mapi_datap, *mapj = mapj_datap;
2252 0 0         if ((mapi==NULL) || (mapj==NULL)) return PDL->make_error(PDL_EUSERERROR, "Error in med2d:" "Out of Memory");
    0          
2253              
2254 0           poff = p_size/2; mapi += p_size-1;
2255 0           qoff = q_size/2; mapj += q_size-1;
2256 0 0         for ( i = 1-p_size; i< m_size; i++) {
2257 0           i2 = i + poff;
2258 0           switch (opt) {
2259 0           case 1: /* REFLECT */
2260 0 0         if (i2<0)
2261 0           i2 = -i2-1;
2262 0 0         else if (i2 >= m_size)
2263 0           i2 = 2*m_size-(i2+1);
2264 0           break;
2265 0           case 2: /* TRUNCATE */
2266 0 0         if (i2<0 || i2 >= m_size)
    0          
2267 0           i2 = -1;
2268 0           break;
2269 0           case 3: /* REPLICATE */
2270 0 0         if (i2<0)
2271 0           i2 = 0;
2272 0 0         if (i2 >= m_size)
2273 0           i2 = m_size-1;
2274 0           break;
2275 0           default:
2276 0 0         REALMOD(i2,m_size);
    0          
2277             }
2278 0           mapi[i] = i2;
2279             }
2280 0 0         for ( j = 1-q_size; j< n_size; j++) {
2281 0           j2 = j + qoff;
2282 0           switch (opt) {
2283 0           case 1: /* REFLECT */
2284 0 0         if (j2<0)
2285 0           j2 = -j2-1;
2286 0 0         else if (j2 >= n_size)
2287 0           j2 = 2*n_size-(j2+1);
2288 0           break;
2289 0           case 2: /* TRUNCATE */
2290 0 0         if (j2<0 || j2 >= n_size)
    0          
2291 0           j2 = -1;
2292 0           break;
2293 0           case 3: /* REPLICATE */
2294 0 0         if (j2<0)
2295 0           j2 = 0;
2296 0 0         if (j2 >= n_size)
2297 0           j2 = n_size-1;
2298 0           break;
2299 0           default:
2300 0 0         REALMOD(j2,n_size);
    0          
2301             }
2302 0           mapj[j] = j2;
2303             }
2304              
2305             #line 331 "lib/PDL/Image2D.pd"
2306             PDL_BROADCASTLOOP_START_med2d_readdata
2307             #line 332 "lib/PDL/Image2D.pd"
2308             {/* 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) {
2309             #line 333 "lib/PDL/Image2D.pd"
2310             PDL_Indx count = 0;
2311             PDL_IF_BAD(int flag = 0;,)
2312             {/* Open q */ PDL_EXPAND2(register PDL_Indx q=0, __q_stop=(__q_size)); for(; q<__q_stop; q+=1) {
2313             #line 336 "lib/PDL/Image2D.pd"
2314             j2 = mapj[n-q];
2315             if (j2 >= 0)
2316             {/* Open p */ PDL_EXPAND2(register PDL_Indx p=0, __p_stop=(__p_size)); for(; p<__p_stop; p+=1) {
2317             #line 339 "lib/PDL/Image2D.pd"
2318             i2 = mapi[m-p];
2319             if (i2 >= 0) {
2320             PDL_LDouble kk = (kern_datap)[0+(__inc_kern_p*(p))+(__inc_kern_q*(q))], aa = (a_datap)[0+(__inc_a_m*(i2))+(__inc_a_n*(j2))];
2321             PDL_IF_BAD(if ( !PDL_ISBAD2(kk,kern_badval,F,kern_badval_isnan) && !PDL_ISBAD2(aa,a_badval,F,a_badval_isnan) ),) {
2322             PDL_IF_BAD(flag = 1;,)
2323             if ( kk > 0 )
2324             (tmp_datap)[0+(__inc_tmp_pq*(count++))] = aa * kk;
2325             }
2326             } /* if: i2 >= 0 */
2327             }} /* Close p */
2328             #line 349 "lib/PDL/Image2D.pd"
2329             }} /* Close q */
2330             #line 350 "lib/PDL/Image2D.pd"
2331             PDL_IF_BAD(if ( flag == 0 ) {
2332             (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))]=b_badval;
2333             } else,) {
2334             qsort_D( tmp_datap, 0, count-1 );
2335             (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))] = (tmp_datap)[0+(__inc_tmp_pq*((count-1)/2))];
2336             }
2337             }} /* Close n */}} /* Close m */
2338             #line 357 "lib/PDL/Image2D.pd"
2339             PDL_BROADCASTLOOP_END_med2d_readdata
2340             #line 2341 "lib/PDL/Image2D-pp-med2d.c"
2341             }
2342 0           } break;
2343 1           case PDL_D: {
2344 1 50         PDL_DECLARE_PARAMS_med2d_1(PDL_Double,D,PDL_Double,D,PDL_Indx,N,PDL_Indx,N)
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
2345 1           {int i,j, i2,j2, poff, qoff;int opt = __params->opt;
2346 1           int m_size = __privtrans->ind_sizes[2];
2347 1           int n_size = __privtrans->ind_sizes[3];
2348 1           int p_size = __privtrans->ind_sizes[4];
2349 1           int q_size = __privtrans->ind_sizes[6];
2350            
2351 1           PDL_Indx *mapi = mapi_datap, *mapj = mapj_datap;
2352 1 50         if ((mapi==NULL) || (mapj==NULL)) return PDL->make_error(PDL_EUSERERROR, "Error in med2d:" "Out of Memory");
    50          
2353              
2354 1           poff = p_size/2; mapi += p_size-1;
2355 1           qoff = q_size/2; mapj += q_size-1;
2356 8 100         for ( i = 1-p_size; i< m_size; i++) {
2357 7           i2 = i + poff;
2358 7           switch (opt) {
2359 0           case 1: /* REFLECT */
2360 0 0         if (i2<0)
2361 0           i2 = -i2-1;
2362 0 0         else if (i2 >= m_size)
2363 0           i2 = 2*m_size-(i2+1);
2364 0           break;
2365 0           case 2: /* TRUNCATE */
2366 0 0         if (i2<0 || i2 >= m_size)
    0          
2367 0           i2 = -1;
2368 0           break;
2369 0           case 3: /* REPLICATE */
2370 0 0         if (i2<0)
2371 0           i2 = 0;
2372 0 0         if (i2 >= m_size)
2373 0           i2 = m_size-1;
2374 0           break;
2375 7           default:
2376 9 100         REALMOD(i2,m_size);
    100          
2377             }
2378 7           mapi[i] = i2;
2379             }
2380 8 100         for ( j = 1-q_size; j< n_size; j++) {
2381 7           j2 = j + qoff;
2382 7           switch (opt) {
2383 0           case 1: /* REFLECT */
2384 0 0         if (j2<0)
2385 0           j2 = -j2-1;
2386 0 0         else if (j2 >= n_size)
2387 0           j2 = 2*n_size-(j2+1);
2388 0           break;
2389 0           case 2: /* TRUNCATE */
2390 0 0         if (j2<0 || j2 >= n_size)
    0          
2391 0           j2 = -1;
2392 0           break;
2393 0           case 3: /* REPLICATE */
2394 0 0         if (j2<0)
2395 0           j2 = 0;
2396 0 0         if (j2 >= n_size)
2397 0           j2 = n_size-1;
2398 0           break;
2399 7           default:
2400 9 100         REALMOD(j2,n_size);
    100          
2401             }
2402 7           mapj[j] = j2;
2403             }
2404              
2405             #line 331 "lib/PDL/Image2D.pd"
2406             PDL_BROADCASTLOOP_START_med2d_readdata
2407             #line 332 "lib/PDL/Image2D.pd"
2408             {/* 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) {
2409             #line 333 "lib/PDL/Image2D.pd"
2410             PDL_Indx count = 0;
2411             PDL_IF_BAD(int flag = 0;,)
2412             {/* Open q */ PDL_EXPAND2(register PDL_Indx q=0, __q_stop=(__q_size)); for(; q<__q_stop; q+=1) {
2413             #line 336 "lib/PDL/Image2D.pd"
2414             j2 = mapj[n-q];
2415             if (j2 >= 0)
2416             {/* Open p */ PDL_EXPAND2(register PDL_Indx p=0, __p_stop=(__p_size)); for(; p<__p_stop; p+=1) {
2417             #line 339 "lib/PDL/Image2D.pd"
2418             i2 = mapi[m-p];
2419             if (i2 >= 0) {
2420             PDL_LDouble kk = (kern_datap)[0+(__inc_kern_p*(p))+(__inc_kern_q*(q))], aa = (a_datap)[0+(__inc_a_m*(i2))+(__inc_a_n*(j2))];
2421             PDL_IF_BAD(if ( !PDL_ISBAD2(kk,kern_badval,D,kern_badval_isnan) && !PDL_ISBAD2(aa,a_badval,D,a_badval_isnan) ),) {
2422             PDL_IF_BAD(flag = 1;,)
2423             if ( kk > 0 )
2424             (tmp_datap)[0+(__inc_tmp_pq*(count++))] = aa * kk;
2425             }
2426             } /* if: i2 >= 0 */
2427             }} /* Close p */
2428             #line 349 "lib/PDL/Image2D.pd"
2429             }} /* Close q */
2430             #line 350 "lib/PDL/Image2D.pd"
2431             PDL_IF_BAD(if ( flag == 0 ) {
2432             (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))]=b_badval;
2433             } else,) {
2434             qsort_D( tmp_datap, 0, count-1 );
2435             (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))] = (tmp_datap)[0+(__inc_tmp_pq*((count-1)/2))];
2436             }
2437             }} /* Close n */}} /* Close m */
2438             #line 357 "lib/PDL/Image2D.pd"
2439             PDL_BROADCASTLOOP_END_med2d_readdata
2440             #line 2441 "lib/PDL/Image2D-pp-med2d.c"
2441             }
2442 1           } break;
2443 0           case PDL_LD: {
2444 0 0         PDL_DECLARE_PARAMS_med2d_1(PDL_LDouble,E,PDL_LDouble,E,PDL_Indx,N,PDL_Indx,N)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
2445 0           {int i,j, i2,j2, poff, qoff;int opt = __params->opt;
2446 0           int m_size = __privtrans->ind_sizes[2];
2447 0           int n_size = __privtrans->ind_sizes[3];
2448 0           int p_size = __privtrans->ind_sizes[4];
2449 0           int q_size = __privtrans->ind_sizes[6];
2450            
2451 0           PDL_Indx *mapi = mapi_datap, *mapj = mapj_datap;
2452 0 0         if ((mapi==NULL) || (mapj==NULL)) return PDL->make_error(PDL_EUSERERROR, "Error in med2d:" "Out of Memory");
    0          
2453              
2454 0           poff = p_size/2; mapi += p_size-1;
2455 0           qoff = q_size/2; mapj += q_size-1;
2456 0 0         for ( i = 1-p_size; i< m_size; i++) {
2457 0           i2 = i + poff;
2458 0           switch (opt) {
2459 0           case 1: /* REFLECT */
2460 0 0         if (i2<0)
2461 0           i2 = -i2-1;
2462 0 0         else if (i2 >= m_size)
2463 0           i2 = 2*m_size-(i2+1);
2464 0           break;
2465 0           case 2: /* TRUNCATE */
2466 0 0         if (i2<0 || i2 >= m_size)
    0          
2467 0           i2 = -1;
2468 0           break;
2469 0           case 3: /* REPLICATE */
2470 0 0         if (i2<0)
2471 0           i2 = 0;
2472 0 0         if (i2 >= m_size)
2473 0           i2 = m_size-1;
2474 0           break;
2475 0           default:
2476 0 0         REALMOD(i2,m_size);
    0          
2477             }
2478 0           mapi[i] = i2;
2479             }
2480 0 0         for ( j = 1-q_size; j< n_size; j++) {
2481 0           j2 = j + qoff;
2482 0           switch (opt) {
2483 0           case 1: /* REFLECT */
2484 0 0         if (j2<0)
2485 0           j2 = -j2-1;
2486 0 0         else if (j2 >= n_size)
2487 0           j2 = 2*n_size-(j2+1);
2488 0           break;
2489 0           case 2: /* TRUNCATE */
2490 0 0         if (j2<0 || j2 >= n_size)
    0          
2491 0           j2 = -1;
2492 0           break;
2493 0           case 3: /* REPLICATE */
2494 0 0         if (j2<0)
2495 0           j2 = 0;
2496 0 0         if (j2 >= n_size)
2497 0           j2 = n_size-1;
2498 0           break;
2499 0           default:
2500 0 0         REALMOD(j2,n_size);
    0          
2501             }
2502 0           mapj[j] = j2;
2503             }
2504              
2505             #line 331 "lib/PDL/Image2D.pd"
2506             PDL_BROADCASTLOOP_START_med2d_readdata
2507             #line 332 "lib/PDL/Image2D.pd"
2508             {/* 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) {
2509             #line 333 "lib/PDL/Image2D.pd"
2510             PDL_Indx count = 0;
2511             PDL_IF_BAD(int flag = 0;,)
2512             {/* Open q */ PDL_EXPAND2(register PDL_Indx q=0, __q_stop=(__q_size)); for(; q<__q_stop; q+=1) {
2513             #line 336 "lib/PDL/Image2D.pd"
2514             j2 = mapj[n-q];
2515             if (j2 >= 0)
2516             {/* Open p */ PDL_EXPAND2(register PDL_Indx p=0, __p_stop=(__p_size)); for(; p<__p_stop; p+=1) {
2517             #line 339 "lib/PDL/Image2D.pd"
2518             i2 = mapi[m-p];
2519             if (i2 >= 0) {
2520             PDL_LDouble kk = (kern_datap)[0+(__inc_kern_p*(p))+(__inc_kern_q*(q))], aa = (a_datap)[0+(__inc_a_m*(i2))+(__inc_a_n*(j2))];
2521             PDL_IF_BAD(if ( !PDL_ISBAD2(kk,kern_badval,E,kern_badval_isnan) && !PDL_ISBAD2(aa,a_badval,E,a_badval_isnan) ),) {
2522             PDL_IF_BAD(flag = 1;,)
2523             if ( kk > 0 )
2524             (tmp_datap)[0+(__inc_tmp_pq*(count++))] = aa * kk;
2525             }
2526             } /* if: i2 >= 0 */
2527             }} /* Close p */
2528             #line 349 "lib/PDL/Image2D.pd"
2529             }} /* Close q */
2530             #line 350 "lib/PDL/Image2D.pd"
2531             PDL_IF_BAD(if ( flag == 0 ) {
2532             (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))]=b_badval;
2533             } else,) {
2534             qsort_E( tmp_datap, 0, count-1 );
2535             (b_datap)[0+(__inc_b_m*(m))+(__inc_b_n*(n))] = (tmp_datap)[0+(__inc_tmp_pq*((count-1)/2))];
2536             }
2537             }} /* Close n */}} /* Close m */
2538             #line 357 "lib/PDL/Image2D.pd"
2539             PDL_BROADCASTLOOP_END_med2d_readdata
2540             #line 2541 "lib/PDL/Image2D-pp-med2d.c"
2541             }
2542 0           } break;
2543 0           default: return PDL->make_error(PDL_EUSERERROR, "PP INTERNAL ERROR in med2d: unhandled datatype(%d), only handles (ABSULKNPQFDE)! PLEASE MAKE A BUG REPORT\n", __privtrans->__datatype);
2544             }
2545             #undef PDL_IF_BAD
2546             }
2547 2           return PDL_err;
2548             }
2549              
2550             static pdl_datatypes pdl_med2d_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, -1 };
2551             static PDL_Indx pdl_med2d_vtable_realdims[] = { 2, 2, 2, 1, 1, 1 };
2552             static char *pdl_med2d_vtable_parnames[] = { "a","kern","b","tmp","mapi","mapj" };
2553             static short pdl_med2d_vtable_parflags[] = {
2554             0,
2555             0,
2556             PDL_PARAM_ISCREAT|PDL_PARAM_ISOUT|PDL_PARAM_ISWRITE,
2557             PDL_PARAM_ISCREAT|PDL_PARAM_ISPHYS|PDL_PARAM_ISTEMP|PDL_PARAM_ISTPLUS|PDL_PARAM_ISTYPED|PDL_PARAM_ISWRITE,
2558             PDL_PARAM_ISCREAT|PDL_PARAM_ISPHYS|PDL_PARAM_ISTEMP|PDL_PARAM_ISTYPED|PDL_PARAM_ISWRITE,
2559             PDL_PARAM_ISCREAT|PDL_PARAM_ISPHYS|PDL_PARAM_ISTEMP|PDL_PARAM_ISTYPED|PDL_PARAM_ISWRITE
2560             };
2561             static pdl_datatypes pdl_med2d_vtable_partypes[] = { -1, -1, -1, PDL_D, PDL_IND, PDL_IND };
2562             static PDL_Indx pdl_med2d_vtable_realdims_starts[] = { 0, 2, 4, 6, 7, 8 };
2563             static PDL_Indx pdl_med2d_vtable_realdims_ind_ids[] = { 2, 3, 4, 6, 2, 3, 5, 0, 1 };
2564             static char *pdl_med2d_vtable_indnames[] = { "isize","jsize","m","n","p","pq","q" };
2565             pdl_transvtable pdl_med2d_vtable = {
2566             PDL_TRANS_DO_BROADCAST|PDL_TRANS_BADPROCESS, 0, pdl_med2d_vtable_gentypes, 2, 6, NULL /*CORE21*/,
2567             pdl_med2d_vtable_realdims, pdl_med2d_vtable_parnames,
2568             pdl_med2d_vtable_parflags, pdl_med2d_vtable_partypes,
2569             pdl_med2d_vtable_realdims_starts, pdl_med2d_vtable_realdims_ind_ids, 9,
2570             7, pdl_med2d_vtable_indnames,
2571             pdl_med2d_redodims, pdl_med2d_readdata, NULL,
2572             NULL,
2573             sizeof(pdl_params_med2d),"PDL::Image2D::med2d"
2574             };
2575              
2576              
2577 2           pdl_error pdl_run_med2d(pdl *a,pdl *kern,pdl *b,int opt) {
2578 2           pdl_error PDL_err = {0, NULL, 0};
2579 2 50         if (!PDL) return (pdl_error){PDL_EFATAL, "PDL core struct is NULL, can't continue",0};
2580 2           pdl_trans *__privtrans = PDL->create_trans(&pdl_med2d_vtable);
2581 2 50         if (!__privtrans) return PDL->make_error_simple(PDL_EFATAL, "Couldn't create trans");
2582 2           pdl_params_med2d *__params = __privtrans->params;
2583 2           __privtrans->pdls[0] = a;
2584 2           __privtrans->pdls[1] = kern;
2585 2           __privtrans->pdls[2] = b;
2586 2 50         PDL_RETERROR(PDL_err, PDL->type_coerce(__privtrans));
2587 2           (__params->opt) = (opt); /* CType.get_copy */
2588 2 50         PDL_RETERROR(PDL_err, PDL->make_trans_mutual(__privtrans));
2589 2           return PDL_err;
2590             }