File Coverage

lib/PDL/Slices-pp-lags.c
Criterion Covered Total %
statement 21 22 95.4
branch 6 12 50.0
condition n/a
subroutine n/a
pod n/a
total 27 34 79.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/Slices.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_Slices
21             extern Core* PDL; /* Structure hold core C functions */
22              
23             #line 1846 "lib/PDL/PP.pm"
24             typedef struct pdl_params_lags {
25             #line 26 "lib/PDL/Slices-pp-lags.c"
26             PDL_Indx nthdim;
27             PDL_Indx step;
28             PDL_Indx nlags;
29             } pdl_params_lags;
30              
31              
32             #line 1857 "lib/PDL/PP.pm"
33             pdl_error pdl_lags_redodims(pdl_trans *__privtrans) {
34             pdl_error PDL_err = {0, NULL, 0};
35             #line 36 "lib/PDL/Slices-pp-lags.c"
36 3           pdl_params_lags *__params = __privtrans->params; (void)__params;
37 3           pdl *__it = __privtrans->pdls[1]; (void) __it;
38 3 50         PDL->hdr_childcopy(__privtrans); __privtrans->dims_redone = 1;
39              
40             #line 1731 "lib/PDL/Slices.pd"
41             PDL_Indx i;
42             if (__params->nthdim < 0) /* the usual conventions */
43             __params->nthdim += __privtrans->pdls[0]->ndims;
44             if (__params->nthdim < 0 || __params->nthdim >= __privtrans->pdls[0]->ndims)
45             return PDL->make_error(PDL_EUSERERROR, "Error in lags:" "dim out of range");
46             if (__params->nlags < 1)
47             return PDL->make_error(PDL_EUSERERROR, "Error in lags:" "number of lags must be positive");
48             if (__params->step < 1)
49             return PDL->make_error(PDL_EUSERERROR, "Error in lags:" "step must be positive");
50             __privtrans->offs = 0;
51             PDL_RETERROR(PDL_err, PDL->reallocdims(__it,__privtrans->pdls[0]->ndims+1));;
52             __privtrans->incs = malloc(sizeof(*__privtrans->incs) * __privtrans->pdls[1]->ndims); /* CType.get_malloc */
53             ;
54             for(i=0; i<__params->nthdim; i++) {
55             __privtrans->pdls[1]->dims[i] = __privtrans->pdls[0]->dims[i];
56             __privtrans->incs[i] = __privtrans->pdls[0]->dimincs[i];
57             }
58             __privtrans->pdls[1]->dims[i] = __privtrans->pdls[0]->dims[i] - __params->step * (__params->nlags-1);
59             if (__privtrans->pdls[1]->dims[i] < 1)
60             return PDL->make_error(PDL_EUSERERROR, "Error in lags:" "product of step size and number of lags too large");
61             __privtrans->pdls[1]->dims[i+1] = __params->nlags;
62             __privtrans->incs[i] = (__privtrans->pdls[0]->dimincs[i]);
63             __privtrans->incs[i+1] = - __privtrans->pdls[0]->dimincs[i] * __params->step;
64             __privtrans->offs += (__privtrans->pdls[1]->dims[i+1] - 1) * (-__privtrans->incs[i+1]);
65             i++;
66             for(; i<__privtrans->pdls[0]->ndims; i++) {
67             __privtrans->pdls[1]->dims[i+1] = __privtrans->pdls[0]->dims[i];
68             __privtrans->incs[i+1] = __privtrans->pdls[0]->dimincs[i];
69             }
70             PDL_RETERROR(PDL_err, PDL->setdims_careful(__it));;
71             #line 72 "lib/PDL/Slices-pp-lags.c"
72 0           return PDL_err;
73             }
74              
75              
76             #line 1857 "lib/PDL/PP.pm"
77             pdl_error pdl_lags_free(pdl_trans *__privtrans, char destroy) {
78             pdl_error PDL_err = {0, NULL, 0};
79             #line 80 "lib/PDL/Slices-pp-lags.c"
80 3           pdl_params_lags *__params = __privtrans->params; (void)__params;
81 3           pdl *__it = __privtrans->pdls[1]; (void) __it;
82 3 50         PDL_FREE_CODE(__privtrans, destroy, , free(__privtrans->incs); /* CType.get_free */
83 3           ) return PDL_err;
84             }
85              
86             static pdl_datatypes pdl_lags_vtable_gentypes[] = { PDL_SB, PDL_B, PDL_S, PDL_US, PDL_L, PDL_UL, PDL_IND, PDL_ULL, PDL_LL, PDL_F, PDL_D, PDL_LD, PDL_CF, PDL_CD, PDL_CLD, -1 };
87             static PDL_Indx pdl_lags_vtable_realdims[] = { 0, 0 };
88             static char *pdl_lags_vtable_parnames[] = { "PARENT","CHILD" };
89             static short pdl_lags_vtable_parflags[] = {
90             0,
91             PDL_PARAM_ISCREAT|PDL_PARAM_ISCREATEALWAYS|PDL_PARAM_ISOUT|PDL_PARAM_ISWRITE
92             };
93             static pdl_datatypes pdl_lags_vtable_partypes[] = { -1, -1 };
94             static PDL_Indx pdl_lags_vtable_realdims_starts[] = { 0, 0 };
95             static PDL_Indx pdl_lags_vtable_realdims_ind_ids[] = { 0 };
96             static char *pdl_lags_vtable_indnames[] = { "" };
97             pdl_transvtable pdl_lags_vtable = {
98             0, PDL_ITRANS_ISAFFINE|PDL_ITRANS_TWOWAY|PDL_ITRANS_DO_DATAFLOW_ANY, pdl_lags_vtable_gentypes, 1, 2, NULL /*CORE21*/,
99             pdl_lags_vtable_realdims, pdl_lags_vtable_parnames,
100             pdl_lags_vtable_parflags, pdl_lags_vtable_partypes,
101             pdl_lags_vtable_realdims_starts, pdl_lags_vtable_realdims_ind_ids, 0,
102             0, pdl_lags_vtable_indnames,
103             pdl_lags_redodims, NULL, NULL,
104             pdl_lags_free,
105             sizeof(pdl_params_lags),"PDL::Slices::lags"
106             };
107              
108              
109 3           pdl_error pdl_run_lags(pdl *PARENT,pdl *CHILD,PDL_Indx nthdim,PDL_Indx step,PDL_Indx nlags) {
110 3           pdl_error PDL_err = {0, NULL, 0};
111 3 50         if (!PDL) return (pdl_error){PDL_EFATAL, "PDL core struct is NULL, can't continue",0};
112 3           pdl_trans *__privtrans = PDL->create_trans(&pdl_lags_vtable);
113 3 50         if (!__privtrans) return PDL->make_error_simple(PDL_EFATAL, "Couldn't create trans");
114 3           pdl_params_lags *__params = __privtrans->params;
115 3           __privtrans->pdls[0] = PARENT;
116 3           __privtrans->pdls[1] = CHILD;
117 3 50         PDL_RETERROR(PDL_err, PDL->type_coerce(__privtrans));
118 3           (__params->nthdim) = (nthdim); /* CType.get_copy */
119 3           (__params->step) = (step); /* CType.get_copy */
120 3           (__params->nlags) = (nlags); /* CType.get_copy */
121 3 50         PDL_RETERROR(PDL_err, PDL->make_trans_mutual(__privtrans));
122 3           return PDL_err;
123             }