File Coverage

lib/PDL/Image2D-pp-warp2d_kernel.c
Criterion Covered Total %
statement 0 75 0.0
branch 0 134 0.0
condition n/a
subroutine n/a
pod n/a
total 0 209 0.0


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-warp2d_kernel.c"
23              
24             /* Fast Modulus with proper negative behaviour */
25              
26             #define REALMOD(a,b) {while ((a)>=(b)) (a) -= (b); while ((a)<0) (a) += (b);}
27              
28             #define X(symbol, ctype, ppsym, ...) \
29             ctype quick_select_ ## ppsym(ctype arr[], int n);
30             PDL_TYPELIST_REAL(X)
31             #undef X
32             #define EZ(x) ez ? 0 : (x)
33             int getnewsize(PDL_Indx cols, PDL_Indx rows, float fangle, PDL_Indx *newcols, PDL_Indx *newrows);
34             typedef unsigned char imT; /* image type */
35             int rotate(imT *im, imT *out, int cols, int rows, int nc, int nr,
36             float fangle, imT bgval, int antialias);
37             #include "resample.h"
38              
39             #line 1846 "lib/PDL/PP.pm"
40             typedef struct pdl_params_warp2d_kernel {
41             #line 42 "lib/PDL/Image2D-pp-warp2d_kernel.c"
42             char *name;
43             PDL_Indx nsize;
44             } pdl_params_warp2d_kernel;
45              
46              
47             #line 1857 "lib/PDL/PP.pm"
48             pdl_error pdl_warp2d_kernel_redodims(pdl_trans *__privtrans) {
49             pdl_error PDL_err = {0, NULL, 0};
50             #line 51 "lib/PDL/Image2D-pp-warp2d_kernel.c"
51 0           pdl_params_warp2d_kernel *__params = __privtrans->params; (void)__params;
52 0           __privtrans->ind_sizes[0] = __params->nsize;
53 0 0         PDL_RETERROR(PDL_err, PDL->redodims_default(__privtrans));
54 0           return PDL_err;
55             }
56              
57              
58             #line 1857 "lib/PDL/PP.pm"
59             pdl_error pdl_warp2d_kernel_readdata(pdl_trans *__privtrans) {
60             pdl_error PDL_err = {0, NULL, 0};
61             #line 62 "lib/PDL/Image2D-pp-warp2d_kernel.c"
62 0           pdl_params_warp2d_kernel *__params = __privtrans->params; (void)__params;
63 0           register PDL_Indx __n_size = __privtrans->ind_sizes[0];
64 0 0         if (!__privtrans->broadcast.incs) return PDL->make_error(PDL_EUSERERROR, "Error in warp2d_kernel:" "broadcast.incs NULL");
65             /* broadcastloop declarations */
66             int __brcloopval;
67             register PDL_Indx __tind0,__tind1; /* counters along dim */
68 0           register PDL_Indx __tnpdls = __privtrans->broadcast.npdls;
69             /* dims here are how many steps along those dims */
70 0           register PDL_Indx __tinc0_x = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,0,0);
71 0           register PDL_Indx __tinc0_k = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,1,0);
72 0           register PDL_Indx __tinc0_kernel = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,2,0);
73 0           register PDL_Indx __tinc1_x = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,0,1);
74 0           register PDL_Indx __tinc1_k = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,1,1);
75 0           register PDL_Indx __tinc1_kernel = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,2,1);
76             #define PDL_BROADCASTLOOP_START_warp2d_kernel_readdata PDL_BROADCASTLOOP_START( \
77             readdata, \
78             __privtrans->broadcast, \
79             __privtrans->vtable, \
80             x_datap += __offsp[0]; \
81             k_datap += __offsp[1]; \
82             kernel_datap += __offsp[2]; \
83             , \
84             ( ,x_datap += __tinc1_x - __tinc0_x * __tdims0 \
85             ,k_datap += __tinc1_k - __tinc0_k * __tdims0 \
86             ,kernel_datap += __tinc1_kernel - __tinc0_kernel * __tdims0 \
87             ), \
88             ( ,x_datap += __tinc0_x \
89             ,k_datap += __tinc0_k \
90             ,kernel_datap += __tinc0_kernel \
91             ) \
92             )
93             #define PDL_BROADCASTLOOP_END_warp2d_kernel_readdata PDL_BROADCASTLOOP_END( \
94             __privtrans->broadcast, \
95             x_datap -= __tinc1_x * __tdims1 + __offsp[0]; \
96             k_datap -= __tinc1_k * __tdims1 + __offsp[1]; \
97             kernel_datap -= __tinc1_kernel * __tdims1 + __offsp[2]; \
98             )
99 0           register PDL_Indx __inc_k_n = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,1,0)]; (void)__inc_k_n;
100 0           register PDL_Indx __inc_kernel_n = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,2,0)]; (void)__inc_kernel_n;
101 0           register PDL_Indx __inc_x_n = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,0,0)]; (void)__inc_x_n;
102             #ifndef PDL_DECLARE_PARAMS_warp2d_kernel_1
103             #define PDL_DECLARE_PARAMS_warp2d_kernel_1(PDL_TYPE_OP,PDL_PPSYM_OP,PDL_TYPE_PARAM_kernel,PDL_PPSYM_PARAM_kernel) \
104             PDL_DECLARE_PARAMETER(PDL_TYPE_OP, x, (__privtrans->pdls[0]), 1, PDL_PPSYM_OP) \
105             PDL_DECLARE_PARAMETER(PDL_TYPE_OP, k, (__privtrans->pdls[1]), 1, PDL_PPSYM_OP) \
106             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_kernel, kernel, (__privtrans->pdls[2]), 1, PDL_PPSYM_PARAM_kernel)
107             #endif
108             #define PDL_IF_BAD(t,f) f
109 0           switch (__privtrans->__datatype) { /* Start generic switch */
110 0           case PDL_F: {
111 0 0         PDL_DECLARE_PARAMS_warp2d_kernel_1(PDL_Float,F,PDL_LDouble,E)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
112 0           { PDL_LDouble *kernel = kernel_datap;
113 0 0         if (!generate_interpolation_kernel(__params->name, __privtrans->ind_sizes[0], kernel))
114 0           return PDL->make_error(PDL_EUSERERROR, "Error in warp2d_kernel:" "Invalid kernel type '%s'",__params->name);
115             /* fill in ndarrays */
116 0           PDL_LDouble xx = 0.0;
117 0 0         PDL_BROADCASTLOOP_START_warp2d_kernel_readdata
    0          
    0          
    0          
    0          
    0          
    0          
118 0 0         {/* Open n */ PDL_EXPAND2(register PDL_Indx n=0, __n_stop=(__n_size)); for(; n<__n_stop; n+=1) {
119 0           (x_datap)[0+(__inc_x_n*(n))] = xx;
120 0           (k_datap)[0+(__inc_k_n*(n))] = kernel[n];
121 0           xx += 1.0 / (double) TABSPERPIX;
122             }} /* Close n */
123 0 0         PDL_BROADCASTLOOP_END_warp2d_kernel_readdata
    0          
124             }
125 0           } break;
126 0           case PDL_D: {
127 0 0         PDL_DECLARE_PARAMS_warp2d_kernel_1(PDL_Double,D,PDL_LDouble,E)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
128 0           { PDL_LDouble *kernel = kernel_datap;
129 0 0         if (!generate_interpolation_kernel(__params->name, __privtrans->ind_sizes[0], kernel))
130 0           return PDL->make_error(PDL_EUSERERROR, "Error in warp2d_kernel:" "Invalid kernel type '%s'",__params->name);
131             /* fill in ndarrays */
132 0           PDL_LDouble xx = 0.0;
133 0 0         PDL_BROADCASTLOOP_START_warp2d_kernel_readdata
    0          
    0          
    0          
    0          
    0          
    0          
134 0 0         {/* Open n */ PDL_EXPAND2(register PDL_Indx n=0, __n_stop=(__n_size)); for(; n<__n_stop; n+=1) {
135 0           (x_datap)[0+(__inc_x_n*(n))] = xx;
136 0           (k_datap)[0+(__inc_k_n*(n))] = kernel[n];
137 0           xx += 1.0 / (double) TABSPERPIX;
138             }} /* Close n */
139 0 0         PDL_BROADCASTLOOP_END_warp2d_kernel_readdata
    0          
140             }
141 0           } break;
142 0           case PDL_LD: {
143 0 0         PDL_DECLARE_PARAMS_warp2d_kernel_1(PDL_LDouble,E,PDL_LDouble,E)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
144 0           { PDL_LDouble *kernel = kernel_datap;
145 0 0         if (!generate_interpolation_kernel(__params->name, __privtrans->ind_sizes[0], kernel))
146 0           return PDL->make_error(PDL_EUSERERROR, "Error in warp2d_kernel:" "Invalid kernel type '%s'",__params->name);
147             /* fill in ndarrays */
148 0           PDL_LDouble xx = 0.0;
149 0 0         PDL_BROADCASTLOOP_START_warp2d_kernel_readdata
    0          
    0          
    0          
    0          
    0          
    0          
150 0 0         {/* Open n */ PDL_EXPAND2(register PDL_Indx n=0, __n_stop=(__n_size)); for(; n<__n_stop; n+=1) {
151 0           (x_datap)[0+(__inc_x_n*(n))] = xx;
152 0           (k_datap)[0+(__inc_k_n*(n))] = kernel[n];
153 0           xx += 1.0 / (double) TABSPERPIX;
154             }} /* Close n */
155 0 0         PDL_BROADCASTLOOP_END_warp2d_kernel_readdata
    0          
156             }
157 0           } break;
158 0           default: return PDL->make_error(PDL_EUSERERROR, "PP INTERNAL ERROR in warp2d_kernel: unhandled datatype(%d), only handles (FDE)! PLEASE MAKE A BUG REPORT\n", __privtrans->__datatype);
159             }
160             #undef PDL_IF_BAD
161 0           return PDL_err;
162             }
163              
164              
165             #line 1857 "lib/PDL/PP.pm"
166             pdl_error pdl_warp2d_kernel_free(pdl_trans *__privtrans, char destroy) {
167             pdl_error PDL_err = {0, NULL, 0};
168             #line 169 "lib/PDL/Image2D-pp-warp2d_kernel.c"
169 0           pdl_params_warp2d_kernel *__params = __privtrans->params; (void)__params;
170 0 0         PDL_FREE_CODE(__privtrans, destroy, free(__params->name); /* CType.get_free */
171 0           , ) return PDL_err;
172             }
173              
174             static pdl_datatypes pdl_warp2d_kernel_vtable_gentypes[] = { PDL_F, PDL_D, PDL_LD, -1 };
175             static PDL_Indx pdl_warp2d_kernel_vtable_realdims[] = { 1, 1, 1 };
176             static char *pdl_warp2d_kernel_vtable_parnames[] = { "x","k","kernel" };
177             static short pdl_warp2d_kernel_vtable_parflags[] = {
178             PDL_PARAM_ISCREAT|PDL_PARAM_ISOUT|PDL_PARAM_ISWRITE,
179             PDL_PARAM_ISCREAT|PDL_PARAM_ISOUT|PDL_PARAM_ISWRITE,
180             PDL_PARAM_ISCREAT|PDL_PARAM_ISPHYS|PDL_PARAM_ISTEMP|PDL_PARAM_ISTYPED|PDL_PARAM_ISWRITE
181             };
182             static pdl_datatypes pdl_warp2d_kernel_vtable_partypes[] = { -1, -1, PDL_LD };
183             static PDL_Indx pdl_warp2d_kernel_vtable_realdims_starts[] = { 0, 1, 2 };
184             static PDL_Indx pdl_warp2d_kernel_vtable_realdims_ind_ids[] = { 0, 0, 0 };
185             static char *pdl_warp2d_kernel_vtable_indnames[] = { "n" };
186             pdl_transvtable pdl_warp2d_kernel_vtable = {
187             PDL_TRANS_DO_BROADCAST|PDL_TRANS_BADIGNORE, 0, pdl_warp2d_kernel_vtable_gentypes, 0, 3, NULL /*CORE21*/,
188             pdl_warp2d_kernel_vtable_realdims, pdl_warp2d_kernel_vtable_parnames,
189             pdl_warp2d_kernel_vtable_parflags, pdl_warp2d_kernel_vtable_partypes,
190             pdl_warp2d_kernel_vtable_realdims_starts, pdl_warp2d_kernel_vtable_realdims_ind_ids, 3,
191             1, pdl_warp2d_kernel_vtable_indnames,
192             pdl_warp2d_kernel_redodims, pdl_warp2d_kernel_readdata, NULL,
193             pdl_warp2d_kernel_free,
194             sizeof(pdl_params_warp2d_kernel),"PDL::Image2D::warp2d_kernel"
195             };
196              
197              
198 0           pdl_error pdl_run_warp2d_kernel(pdl *x,pdl *k,char *name,PDL_Indx nsize) {
199 0           pdl_error PDL_err = {0, NULL, 0};
200 0 0         if (!PDL) return (pdl_error){PDL_EFATAL, "PDL core struct is NULL, can't continue",0};
201 0           pdl_trans *__privtrans = PDL->create_trans(&pdl_warp2d_kernel_vtable);
202 0 0         if (!__privtrans) return PDL->make_error_simple(PDL_EFATAL, "Couldn't create trans");
203 0           pdl_params_warp2d_kernel *__params = __privtrans->params;
204 0           __privtrans->pdls[0] = x;
205 0           __privtrans->pdls[1] = k;
206 0 0         PDL_RETERROR(PDL_err, PDL->type_coerce(__privtrans));
207 0           (__params->name) = malloc(strlen(name)+1); strcpy(__params->name,name); /* CType.get_copy */
208 0           (__params->nsize) = (nsize); /* CType.get_copy */
209 0 0         PDL_RETERROR(PDL_err, PDL->make_trans_mutual(__privtrans));
210 0           return PDL_err;
211             }