File Coverage

lib/PDL/IO/Pnm-pp-pnminraw.c
Criterion Covered Total %
statement 71 104 68.2
branch 72 180 40.0
condition n/a
subroutine n/a
pod n/a
total 143 284 50.3


line stmt bran cond sub pod time code
1              
2             #line 453 "lib/PDL/PP.pm"
3             /*
4             * THIS FILE WAS GENERATED BY PDL::PP from lib/PDL/IO/Pnm.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_IO_Pnm
21             extern Core* PDL; /* Structure hold core C functions */
22              
23             #line 1846 "lib/PDL/PP.pm"
24             typedef struct pdl_params_pnminraw {
25             #line 26 "lib/PDL/IO/Pnm-pp-pnminraw.c"
26             IV ms;
27             IV ns;
28             int isbin;
29             PerlIO *fp;
30             } pdl_params_pnminraw;
31              
32              
33             #line 1857 "lib/PDL/PP.pm"
34             pdl_error pdl_pnminraw_redodims(pdl_trans *__privtrans) {
35             pdl_error PDL_err = {0, NULL, 0};
36             #line 37 "lib/PDL/IO/Pnm-pp-pnminraw.c"
37 27           pdl_params_pnminraw *__params = __privtrans->params; (void)__params;
38 27           __privtrans->ind_sizes[1] = __params->ms;
39 27           __privtrans->ind_sizes[2] = __params->ns;
40             #ifndef PDL_DECLARE_PARAMS_pnminraw_0
41             #define PDL_DECLARE_PARAMS_pnminraw_0(PDL_TYPE_OP,PDL_PPSYM_OP,PDL_TYPE_PARAM_im,PDL_PPSYM_PARAM_im,PDL_TYPE_PARAM_buf,PDL_PPSYM_PARAM_buf) \
42             PDL_DECLARE_PARAMETER(PDL_TYPE_OP, type, (__privtrans->pdls[0]), 0, PDL_PPSYM_OP) \
43             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_im, im, (__privtrans->pdls[1]), 0, PDL_PPSYM_PARAM_im) \
44             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_buf, buf, (__privtrans->pdls[2]), 0, PDL_PPSYM_PARAM_buf)
45             #endif
46             #define PDL_IF_BAD(t,f) f
47 27           switch (__privtrans->__datatype) { /* Start generic switch */
48 13           case PDL_B: {
49 13 50         PDL_DECLARE_PARAMS_pnminraw_0(PDL_Byte,B,PDL_Byte,B,PDL_Byte,B)
    50          
    50          
50             {
51 13 100         __privtrans->ind_sizes[0] = __params->isbin ? (__privtrans->ind_sizes[1]+7) / 8 : __privtrans->ind_sizes[1] * sizeof(PDL_Byte);
52             }
53 13           } break;
54 14           case PDL_US: {
55 14 50         PDL_DECLARE_PARAMS_pnminraw_0(PDL_Ushort,U,PDL_Ushort,U,PDL_Byte,B)
    50          
    50          
56             {
57 14 50         __privtrans->ind_sizes[0] = __params->isbin ? (__privtrans->ind_sizes[1]+7) / 8 : __privtrans->ind_sizes[1] * sizeof(PDL_Ushort);
58             }
59 14           } break;
60 0           case PDL_L: {
61 0 0         PDL_DECLARE_PARAMS_pnminraw_0(PDL_Long,L,PDL_Long,L,PDL_Byte,B)
    0          
    0          
62             {
63 0 0         __privtrans->ind_sizes[0] = __params->isbin ? (__privtrans->ind_sizes[1]+7) / 8 : __privtrans->ind_sizes[1] * sizeof(PDL_Long);
64             }
65 0           } break;
66 0           default: return PDL->make_error(PDL_EUSERERROR, "PP INTERNAL ERROR in pnminraw: unhandled datatype(%d), only handles (BUL)! PLEASE MAKE A BUG REPORT\n", __privtrans->__datatype);
67             }
68             #undef PDL_IF_BAD
69              
70 27 50         PDL_RETERROR(PDL_err, PDL->redodims_default(__privtrans));
71 27           return PDL_err;
72             }
73              
74              
75             #line 1857 "lib/PDL/PP.pm"
76             pdl_error pdl_pnminraw_readdata(pdl_trans *__privtrans) {
77             pdl_error PDL_err = {0, NULL, 0};
78             #line 79 "lib/PDL/IO/Pnm-pp-pnminraw.c"
79 27           pdl_params_pnminraw *__params = __privtrans->params; (void)__params;
80 27           register PDL_Indx __m_size = __privtrans->ind_sizes[1];
81 27           register PDL_Indx __n_size = __privtrans->ind_sizes[2];
82 27 50         if (!__privtrans->broadcast.incs) return PDL->make_error(PDL_EUSERERROR, "Error in pnminraw:" "broadcast.incs NULL");
83             /* broadcastloop declarations */
84             int __brcloopval;
85             register PDL_Indx __tind0,__tind1; /* counters along dim */
86 27           register PDL_Indx __tnpdls = __privtrans->broadcast.npdls;
87             /* dims here are how many steps along those dims */
88 27           register PDL_Indx __tinc0_type = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,0,0);
89 27           register PDL_Indx __tinc0_im = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,1,0);
90 27           register PDL_Indx __tinc0_buf = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,2,0);
91 27           register PDL_Indx __tinc1_type = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,0,1);
92 27           register PDL_Indx __tinc1_im = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,1,1);
93 27           register PDL_Indx __tinc1_buf = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,2,1);
94             #define PDL_BROADCASTLOOP_START_pnminraw_readdata PDL_BROADCASTLOOP_START( \
95             readdata, \
96             __privtrans->broadcast, \
97             __privtrans->vtable, \
98             type_datap += __offsp[0]; \
99             im_datap += __offsp[1]; \
100             buf_datap += __offsp[2]; \
101             , \
102             ( ,type_datap += __tinc1_type - __tinc0_type * __tdims0 \
103             ,im_datap += __tinc1_im - __tinc0_im * __tdims0 \
104             ,buf_datap += __tinc1_buf - __tinc0_buf * __tdims0 \
105             ), \
106             ( ,type_datap += __tinc0_type \
107             ,im_datap += __tinc0_im \
108             ,buf_datap += __tinc0_buf \
109             ) \
110             )
111             #define PDL_BROADCASTLOOP_END_pnminraw_readdata PDL_BROADCASTLOOP_END( \
112             __privtrans->broadcast, \
113             type_datap -= __tinc1_type * __tdims1 + __offsp[0]; \
114             im_datap -= __tinc1_im * __tdims1 + __offsp[1]; \
115             buf_datap -= __tinc1_buf * __tdims1 + __offsp[2]; \
116             )
117 27           register PDL_Indx __inc_buf_llen = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,2,0)]; (void)__inc_buf_llen;
118 27           register PDL_Indx __inc_im_m = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,1,0)]; (void)__inc_im_m;register PDL_Indx __inc_im_n = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,1,1)]; (void)__inc_im_n;
119             #ifndef PDL_DECLARE_PARAMS_pnminraw_1
120             #define PDL_DECLARE_PARAMS_pnminraw_1(PDL_TYPE_OP,PDL_PPSYM_OP,PDL_TYPE_PARAM_im,PDL_PPSYM_PARAM_im,PDL_TYPE_PARAM_buf,PDL_PPSYM_PARAM_buf) \
121             PDL_DECLARE_PARAMETER(PDL_TYPE_OP, type, (__privtrans->pdls[0]), 1, PDL_PPSYM_OP) \
122             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_im, im, (__privtrans->pdls[1]), 1, PDL_PPSYM_PARAM_im) \
123             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_buf, buf, (__privtrans->pdls[2]), 1, PDL_PPSYM_PARAM_buf)
124             #endif
125             #define PDL_IF_BAD(t,f) f
126 27           switch (__privtrans->__datatype) { /* Start generic switch */
127 13           case PDL_B: {
128 13 50         PDL_DECLARE_PARAMS_pnminraw_1(PDL_Byte,B,PDL_Byte,B,PDL_Byte,B)
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
129 52 50         PDL_BROADCASTLOOP_START_pnminraw_readdata {
    50          
    50          
    50          
    50          
    100          
    100          
130             /* with top to bottom inversion */
131 83 100         {/* Open n=::-1 */ PDL_EXPAND2(register PDL_Indx n=(__n_size-1), __n_stop=0); for(; n>=__n_stop; n+=-1) {
132 70 50         if (PerlIO_read(__params->fp,buf_datap,__privtrans->ind_sizes[0]) != __privtrans->ind_sizes[0])
133 0           return PDL->make_error(PDL_EUSERERROR, "Error in pnminraw:" "Error reading pnm file");
134 70 100         if (__params->isbin) { /* unpack buffer */
135 36           PDL_Byte *bp=buf_datap; int k=0, bit=0;
136 252 100         {/* Open m */ PDL_EXPAND2(register PDL_Indx m=0, __m_stop=(__m_size)); for(; m<__m_stop; m+=1) {
137 216           bit &= 7;
138 216 100         if (!bit) k = *bp++;
139             /* here we do the inversion */
140 216           (im_datap)[0+(__inc_im_m*(m))+(__inc_im_n*(n))] = (k&0x80) ? 0 : 1;
141 216           k = k << 1;
142 216           bit++;
143             }} /* Close m */
144             } else {
145 34           PDL_Byte *gbp = (PDL_Byte*)buf_datap;
146 344 100         {/* Open m */ PDL_EXPAND2(register PDL_Indx m=0, __m_stop=(__m_size)); for(; m<__m_stop; m+=1) { (im_datap)[0+(__inc_im_m*(m))+(__inc_im_n*(n))] = *gbp++; }} /* Close m */
147             }
148             }} /* Close n=::-1 */
149 13 50         }PDL_BROADCASTLOOP_END_pnminraw_readdata
    50          
150 13           } break;
151 14           case PDL_US: {
152 14 50         PDL_DECLARE_PARAMS_pnminraw_1(PDL_Ushort,U,PDL_Ushort,U,PDL_Byte,B)
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
153 56 50         PDL_BROADCASTLOOP_START_pnminraw_readdata {
    50          
    50          
    50          
    50          
    100          
    100          
154             /* with top to bottom inversion */
155 311 100         {/* Open n=::-1 */ PDL_EXPAND2(register PDL_Indx n=(__n_size-1), __n_stop=0); for(; n>=__n_stop; n+=-1) {
156 297 50         if (PerlIO_read(__params->fp,buf_datap,__privtrans->ind_sizes[0]) != __privtrans->ind_sizes[0])
157 0           return PDL->make_error(PDL_EUSERERROR, "Error in pnminraw:" "Error reading pnm file");
158 297 50         if (__params->isbin) { /* unpack buffer */
159 0           PDL_Byte *bp=buf_datap; int k=0, bit=0;
160 0 0         {/* Open m */ PDL_EXPAND2(register PDL_Indx m=0, __m_stop=(__m_size)); for(; m<__m_stop; m+=1) {
161 0           bit &= 7;
162 0 0         if (!bit) k = *bp++;
163             /* here we do the inversion */
164 0           (im_datap)[0+(__inc_im_m*(m))+(__inc_im_n*(n))] = (k&0x80) ? 0 : 1;
165 0           k = k << 1;
166 0           bit++;
167             }} /* Close m */
168             } else {
169 297           PDL_Ushort *gbp = (PDL_Ushort*)buf_datap;
170 65865 100         {/* Open m */ PDL_EXPAND2(register PDL_Indx m=0, __m_stop=(__m_size)); for(; m<__m_stop; m+=1) { (im_datap)[0+(__inc_im_m*(m))+(__inc_im_n*(n))] = *gbp++; }} /* Close m */
171             }
172             }} /* Close n=::-1 */
173 14 50         }PDL_BROADCASTLOOP_END_pnminraw_readdata
    50          
174 14           } break;
175 0           case PDL_L: {
176 0 0         PDL_DECLARE_PARAMS_pnminraw_1(PDL_Long,L,PDL_Long,L,PDL_Byte,B)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
177 0 0         PDL_BROADCASTLOOP_START_pnminraw_readdata {
    0          
    0          
    0          
    0          
    0          
    0          
178             /* with top to bottom inversion */
179 0 0         {/* Open n=::-1 */ PDL_EXPAND2(register PDL_Indx n=(__n_size-1), __n_stop=0); for(; n>=__n_stop; n+=-1) {
180 0 0         if (PerlIO_read(__params->fp,buf_datap,__privtrans->ind_sizes[0]) != __privtrans->ind_sizes[0])
181 0           return PDL->make_error(PDL_EUSERERROR, "Error in pnminraw:" "Error reading pnm file");
182 0 0         if (__params->isbin) { /* unpack buffer */
183 0           PDL_Byte *bp=buf_datap; int k=0, bit=0;
184 0 0         {/* Open m */ PDL_EXPAND2(register PDL_Indx m=0, __m_stop=(__m_size)); for(; m<__m_stop; m+=1) {
185 0           bit &= 7;
186 0 0         if (!bit) k = *bp++;
187             /* here we do the inversion */
188 0           (im_datap)[0+(__inc_im_m*(m))+(__inc_im_n*(n))] = (k&0x80) ? 0 : 1;
189 0           k = k << 1;
190 0           bit++;
191             }} /* Close m */
192             } else {
193 0           PDL_Long *gbp = (PDL_Long*)buf_datap;
194 0 0         {/* Open m */ PDL_EXPAND2(register PDL_Indx m=0, __m_stop=(__m_size)); for(; m<__m_stop; m+=1) { (im_datap)[0+(__inc_im_m*(m))+(__inc_im_n*(n))] = *gbp++; }} /* Close m */
195             }
196             }} /* Close n=::-1 */
197 0 0         }PDL_BROADCASTLOOP_END_pnminraw_readdata
    0          
198 0           } break;
199 0           default: return PDL->make_error(PDL_EUSERERROR, "PP INTERNAL ERROR in pnminraw: unhandled datatype(%d), only handles (BUL)! PLEASE MAKE A BUG REPORT\n", __privtrans->__datatype);
200             }
201             #undef PDL_IF_BAD
202 27           return PDL_err;
203             }
204              
205             static pdl_datatypes pdl_pnminraw_vtable_gentypes[] = { PDL_B, PDL_US, PDL_L, -1 };
206             static PDL_Indx pdl_pnminraw_vtable_realdims[] = { 0, 2, 1 };
207             static char *pdl_pnminraw_vtable_parnames[] = { "type","im","buf" };
208             static short pdl_pnminraw_vtable_parflags[] = {
209             0,
210             PDL_PARAM_ISCREAT|PDL_PARAM_ISOUT|PDL_PARAM_ISTPLUS|PDL_PARAM_ISTYPED|PDL_PARAM_ISWRITE,
211             PDL_PARAM_ISCREAT|PDL_PARAM_ISPHYS|PDL_PARAM_ISTEMP|PDL_PARAM_ISTYPED|PDL_PARAM_ISWRITE
212             };
213             static pdl_datatypes pdl_pnminraw_vtable_partypes[] = { -1, PDL_B, PDL_B };
214             static PDL_Indx pdl_pnminraw_vtable_realdims_starts[] = { 0, 0, 2 };
215             static PDL_Indx pdl_pnminraw_vtable_realdims_ind_ids[] = { 1, 2, 0 };
216             static char *pdl_pnminraw_vtable_indnames[] = { "llen","m","n" };
217             pdl_transvtable pdl_pnminraw_vtable = {
218             PDL_TRANS_DO_BROADCAST, 0, pdl_pnminraw_vtable_gentypes, 1, 3, NULL /*CORE21*/,
219             pdl_pnminraw_vtable_realdims, pdl_pnminraw_vtable_parnames,
220             pdl_pnminraw_vtable_parflags, pdl_pnminraw_vtable_partypes,
221             pdl_pnminraw_vtable_realdims_starts, pdl_pnminraw_vtable_realdims_ind_ids, 3,
222             3, pdl_pnminraw_vtable_indnames,
223             pdl_pnminraw_redodims, pdl_pnminraw_readdata, NULL,
224             NULL,
225             sizeof(pdl_params_pnminraw),"PDL::IO::Pnm::pnminraw"
226             };
227              
228              
229 27           pdl_error pdl_run_pnminraw(pdl *type,pdl *im,IV ms,IV ns,int isbin,PerlIO *fp) {
230 27           pdl_error PDL_err = {0, NULL, 0};
231 27 50         if (!PDL) return (pdl_error){PDL_EFATAL, "PDL core struct is NULL, can't continue",0};
232 27           pdl_trans *__privtrans = PDL->create_trans(&pdl_pnminraw_vtable);
233 27 50         if (!__privtrans) return PDL->make_error_simple(PDL_EFATAL, "Couldn't create trans");
234 27           pdl_params_pnminraw *__params = __privtrans->params;
235 27           __privtrans->pdls[0] = type;
236 27           __privtrans->pdls[1] = im;
237 27 50         PDL_RETERROR(PDL_err, PDL->type_coerce(__privtrans));
238 27           (__params->ms) = (ms); /* CType.get_copy */
239 27           (__params->ns) = (ns); /* CType.get_copy */
240 27           (__params->isbin) = (isbin); /* CType.get_copy */
241 27           (__params->fp) = (fp); /* CType.get_copy */
242 27 50         PDL_RETERROR(PDL_err, PDL->make_trans_mutual(__privtrans));
243 27           return PDL_err;
244             }