File Coverage

lib/PDL/Primitive-pp-vsearchvec.c
Criterion Covered Total %
statement 93 349 26.6
branch 115 802 14.3
condition n/a
subroutine n/a
pod n/a
total 208 1151 18.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/Primitive.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_Primitive
21             extern Core* PDL; /* Structure hold core C functions */
22              
23             #line 1857 "lib/PDL/PP.pm"
24             pdl_error pdl_vsearchvec_readdata(pdl_trans *__privtrans) {
25             pdl_error PDL_err = {0, NULL, 0};
26             #line 27 "lib/PDL/Primitive-pp-vsearchvec.c"
27 7           register PDL_Indx __M_size = __privtrans->ind_sizes[0];
28 7 50         if (!__privtrans->broadcast.incs) return PDL->make_error(PDL_EUSERERROR, "Error in vsearchvec:" "broadcast.incs NULL");
29             /* broadcastloop declarations */
30             int __brcloopval;
31             register PDL_Indx __tind0,__tind1; /* counters along dim */
32 7           register PDL_Indx __tnpdls = __privtrans->broadcast.npdls;
33             /* dims here are how many steps along those dims */
34 7           register PDL_Indx __tinc0_find = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,0,0);
35 7           register PDL_Indx __tinc0_which = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,1,0);
36 7           register PDL_Indx __tinc0_found = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,2,0);
37 7           register PDL_Indx __tinc1_find = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,0,1);
38 7           register PDL_Indx __tinc1_which = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,1,1);
39 7           register PDL_Indx __tinc1_found = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,2,1);
40             #define PDL_BROADCASTLOOP_START_vsearchvec_readdata PDL_BROADCASTLOOP_START( \
41             readdata, \
42             __privtrans->broadcast, \
43             __privtrans->vtable, \
44             find_datap += __offsp[0]; \
45             which_datap += __offsp[1]; \
46             found_datap += __offsp[2]; \
47             , \
48             ( ,find_datap += __tinc1_find - __tinc0_find * __tdims0 \
49             ,which_datap += __tinc1_which - __tinc0_which * __tdims0 \
50             ,found_datap += __tinc1_found - __tinc0_found * __tdims0 \
51             ), \
52             ( ,find_datap += __tinc0_find \
53             ,which_datap += __tinc0_which \
54             ,found_datap += __tinc0_found \
55             ) \
56             )
57             #define PDL_BROADCASTLOOP_END_vsearchvec_readdata PDL_BROADCASTLOOP_END( \
58             __privtrans->broadcast, \
59             find_datap -= __tinc1_find * __tdims1 + __offsp[0]; \
60             which_datap -= __tinc1_which * __tdims1 + __offsp[1]; \
61             found_datap -= __tinc1_found * __tdims1 + __offsp[2]; \
62             )
63 7           register PDL_Indx __inc_find_M = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,0,0)]; (void)__inc_find_M;
64 7           register PDL_Indx __inc_which_M = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,1,0)]; (void)__inc_which_M;register PDL_Indx __inc_which_N = __privtrans->inc_sizes[PDL_INC_ID(__privtrans->vtable,1,1)]; (void)__inc_which_N;
65             #ifndef PDL_DECLARE_PARAMS_vsearchvec_1
66             #define PDL_DECLARE_PARAMS_vsearchvec_1(PDL_TYPE_OP,PDL_PPSYM_OP,PDL_TYPE_PARAM_found,PDL_PPSYM_PARAM_found) \
67             PDL_DECLARE_PARAMETER(PDL_TYPE_OP, find, (__privtrans->pdls[0]), 1, PDL_PPSYM_OP) \
68             PDL_DECLARE_PARAMETER(PDL_TYPE_OP, which, (__privtrans->pdls[1]), 1, PDL_PPSYM_OP) \
69             PDL_DECLARE_PARAMETER(PDL_TYPE_PARAM_found, found, (__privtrans->pdls[2]), 1, PDL_PPSYM_PARAM_found)
70             #endif
71             #define PDL_IF_BAD(t,f) f
72 7           switch (__privtrans->__datatype) { /* Start generic switch */
73 0           case PDL_SB: {
74 0 0         PDL_DECLARE_PARAMS_vsearchvec_1(PDL_SByte,A,PDL_Indx,N)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
75             {
76 0           int carp=0;
77 0 0         PDL_BROADCASTLOOP_START_vsearchvec_readdata
    0          
    0          
    0          
    0          
    0          
    0          
78 0           PDL_Indx n1=__privtrans->ind_sizes[1]-1, nlo=-1, nhi=n1, nn;
79             int cmpval, is_asc_sorted;
80 0           cmpval = 0;
81 0 0         {/* Open M */ PDL_EXPAND2(register PDL_Indx M=0, __M_stop=(__M_size)); for(; M<__M_stop; M+=1) { if ((which_datap)[0+(__inc_which_M*(M))+(__inc_which_N*(n1))] != (which_datap)[0+(__inc_which_M*(M))+(__inc_which_N*(0))]) { cmpval = (which_datap)[0+(__inc_which_M*(M))+(__inc_which_N*(n1))] < (which_datap)[0+(__inc_which_M*(M))+(__inc_which_N*(0))] ? -1 : 1; break; } }} /* Close M */
    0          
    0          
82             ;
83 0           is_asc_sorted = (cmpval > 0);
84 0 0         while (nhi-nlo > 1) {
85 0           nn = (nhi+nlo) >> 1;
86 0           cmpval = 0;
87 0 0         {/* Open M */ PDL_EXPAND2(register PDL_Indx M=0, __M_stop=(__M_size)); for(; M<__M_stop; M+=1) { if ((find_datap)[0+(__inc_find_M*(M))] != (which_datap)[0+(__inc_which_M*(M))+(__inc_which_N*(nn))]) { cmpval = (find_datap)[0+(__inc_find_M*(M))] < (which_datap)[0+(__inc_which_M*(M))+(__inc_which_N*(nn))] ? -1 : 1; break; } }} /* Close M */
    0          
    0          
88             ;
89 0 0         if ((cmpval > 0) == is_asc_sorted)
90 0           nlo=nn;
91             else
92 0           nhi=nn;
93             }
94 0 0         if (nlo==-1) {
95 0           nhi=0;
96 0 0         } else if (nlo==n1) {
97 0           cmpval = 0;
98 0 0         {/* Open M */ PDL_EXPAND2(register PDL_Indx M=0, __M_stop=(__M_size)); for(; M<__M_stop; M+=1) { if ((find_datap)[0+(__inc_find_M*(M))] != (which_datap)[0+(__inc_which_M*(M))+(__inc_which_N*(n1))]) { cmpval = (find_datap)[0+(__inc_find_M*(M))] < (which_datap)[0+(__inc_which_M*(M))+(__inc_which_N*(n1))] ? -1 : 1; break; } }} /* Close M */
    0          
    0          
99             ;
100 0 0         if (cmpval != 0) carp = 1;
101 0           nhi = n1;
102             } else {
103 0           nhi = nlo+1;
104             }
105 0           (found_datap)[0] = nhi;
106 0 0         PDL_BROADCASTLOOP_END_vsearchvec_readdata
    0          
107 0 0         if (carp) warn("some values had to be extrapolated");
108             }
109 0           } break;
110 0           case PDL_B: {
111 0 0         PDL_DECLARE_PARAMS_vsearchvec_1(PDL_Byte,B,PDL_Indx,N)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
112             {
113 0           int carp=0;
114 0 0         PDL_BROADCASTLOOP_START_vsearchvec_readdata
    0          
    0          
    0          
    0          
    0          
    0          
115 0           PDL_Indx n1=__privtrans->ind_sizes[1]-1, nlo=-1, nhi=n1, nn;
116             int cmpval, is_asc_sorted;
117 0           cmpval = 0;
118 0 0         {/* Open M */ PDL_EXPAND2(register PDL_Indx M=0, __M_stop=(__M_size)); for(; M<__M_stop; M+=1) { if ((which_datap)[0+(__inc_which_M*(M))+(__inc_which_N*(n1))] != (which_datap)[0+(__inc_which_M*(M))+(__inc_which_N*(0))]) { cmpval = (which_datap)[0+(__inc_which_M*(M))+(__inc_which_N*(n1))] < (which_datap)[0+(__inc_which_M*(M))+(__inc_which_N*(0))] ? -1 : 1; break; } }} /* Close M */
    0          
    0          
119             ;
120 0           is_asc_sorted = (cmpval > 0);
121 0 0         while (nhi-nlo > 1) {
122 0           nn = (nhi+nlo) >> 1;
123 0           cmpval = 0;
124 0 0         {/* Open M */ PDL_EXPAND2(register PDL_Indx M=0, __M_stop=(__M_size)); for(; M<__M_stop; M+=1) { if ((find_datap)[0+(__inc_find_M*(M))] != (which_datap)[0+(__inc_which_M*(M))+(__inc_which_N*(nn))]) { cmpval = (find_datap)[0+(__inc_find_M*(M))] < (which_datap)[0+(__inc_which_M*(M))+(__inc_which_N*(nn))] ? -1 : 1; break; } }} /* Close M */
    0          
    0          
125             ;
126 0 0         if ((cmpval > 0) == is_asc_sorted)
127 0           nlo=nn;
128             else
129 0           nhi=nn;
130             }
131 0 0         if (nlo==-1) {
132 0           nhi=0;
133 0 0         } else if (nlo==n1) {
134 0           cmpval = 0;
135 0 0         {/* Open M */ PDL_EXPAND2(register PDL_Indx M=0, __M_stop=(__M_size)); for(; M<__M_stop; M+=1) { if ((find_datap)[0+(__inc_find_M*(M))] != (which_datap)[0+(__inc_which_M*(M))+(__inc_which_N*(n1))]) { cmpval = (find_datap)[0+(__inc_find_M*(M))] < (which_datap)[0+(__inc_which_M*(M))+(__inc_which_N*(n1))] ? -1 : 1; break; } }} /* Close M */
    0          
    0          
136             ;
137 0 0         if (cmpval != 0) carp = 1;
138 0           nhi = n1;
139             } else {
140 0           nhi = nlo+1;
141             }
142 0           (found_datap)[0] = nhi;
143 0 0         PDL_BROADCASTLOOP_END_vsearchvec_readdata
    0          
144 0 0         if (carp) warn("some values had to be extrapolated");
145             }
146 0           } break;
147 0           case PDL_S: {
148 0 0         PDL_DECLARE_PARAMS_vsearchvec_1(PDL_Short,S,PDL_Indx,N)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
149             {
150 0           int carp=0;
151 0 0         PDL_BROADCASTLOOP_START_vsearchvec_readdata
    0          
    0          
    0          
    0          
    0          
    0          
152 0           PDL_Indx n1=__privtrans->ind_sizes[1]-1, nlo=-1, nhi=n1, nn;
153             int cmpval, is_asc_sorted;
154 0           cmpval = 0;
155 0 0         {/* Open M */ PDL_EXPAND2(register PDL_Indx M=0, __M_stop=(__M_size)); for(; M<__M_stop; M+=1) { if ((which_datap)[0+(__inc_which_M*(M))+(__inc_which_N*(n1))] != (which_datap)[0+(__inc_which_M*(M))+(__inc_which_N*(0))]) { cmpval = (which_datap)[0+(__inc_which_M*(M))+(__inc_which_N*(n1))] < (which_datap)[0+(__inc_which_M*(M))+(__inc_which_N*(0))] ? -1 : 1; break; } }} /* Close M */
    0          
    0          
156             ;
157 0           is_asc_sorted = (cmpval > 0);
158 0 0         while (nhi-nlo > 1) {
159 0           nn = (nhi+nlo) >> 1;
160 0           cmpval = 0;
161 0 0         {/* Open M */ PDL_EXPAND2(register PDL_Indx M=0, __M_stop=(__M_size)); for(; M<__M_stop; M+=1) { if ((find_datap)[0+(__inc_find_M*(M))] != (which_datap)[0+(__inc_which_M*(M))+(__inc_which_N*(nn))]) { cmpval = (find_datap)[0+(__inc_find_M*(M))] < (which_datap)[0+(__inc_which_M*(M))+(__inc_which_N*(nn))] ? -1 : 1; break; } }} /* Close M */
    0          
    0          
162             ;
163 0 0         if ((cmpval > 0) == is_asc_sorted)
164 0           nlo=nn;
165             else
166 0           nhi=nn;
167             }
168 0 0         if (nlo==-1) {
169 0           nhi=0;
170 0 0         } else if (nlo==n1) {
171 0           cmpval = 0;
172 0 0         {/* Open M */ PDL_EXPAND2(register PDL_Indx M=0, __M_stop=(__M_size)); for(; M<__M_stop; M+=1) { if ((find_datap)[0+(__inc_find_M*(M))] != (which_datap)[0+(__inc_which_M*(M))+(__inc_which_N*(n1))]) { cmpval = (find_datap)[0+(__inc_find_M*(M))] < (which_datap)[0+(__inc_which_M*(M))+(__inc_which_N*(n1))] ? -1 : 1; break; } }} /* Close M */
    0          
    0          
173             ;
174 0 0         if (cmpval != 0) carp = 1;
175 0           nhi = n1;
176             } else {
177 0           nhi = nlo+1;
178             }
179 0           (found_datap)[0] = nhi;
180 0 0         PDL_BROADCASTLOOP_END_vsearchvec_readdata
    0          
181 0 0         if (carp) warn("some values had to be extrapolated");
182             }
183 0           } break;
184 0           case PDL_US: {
185 0 0         PDL_DECLARE_PARAMS_vsearchvec_1(PDL_Ushort,U,PDL_Indx,N)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
186             {
187 0           int carp=0;
188 0 0         PDL_BROADCASTLOOP_START_vsearchvec_readdata
    0          
    0          
    0          
    0          
    0          
    0          
189 0           PDL_Indx n1=__privtrans->ind_sizes[1]-1, nlo=-1, nhi=n1, nn;
190             int cmpval, is_asc_sorted;
191 0           cmpval = 0;
192 0 0         {/* Open M */ PDL_EXPAND2(register PDL_Indx M=0, __M_stop=(__M_size)); for(; M<__M_stop; M+=1) { if ((which_datap)[0+(__inc_which_M*(M))+(__inc_which_N*(n1))] != (which_datap)[0+(__inc_which_M*(M))+(__inc_which_N*(0))]) { cmpval = (which_datap)[0+(__inc_which_M*(M))+(__inc_which_N*(n1))] < (which_datap)[0+(__inc_which_M*(M))+(__inc_which_N*(0))] ? -1 : 1; break; } }} /* Close M */
    0          
    0          
193             ;
194 0           is_asc_sorted = (cmpval > 0);
195 0 0         while (nhi-nlo > 1) {
196 0           nn = (nhi+nlo) >> 1;
197 0           cmpval = 0;
198 0 0         {/* Open M */ PDL_EXPAND2(register PDL_Indx M=0, __M_stop=(__M_size)); for(; M<__M_stop; M+=1) { if ((find_datap)[0+(__inc_find_M*(M))] != (which_datap)[0+(__inc_which_M*(M))+(__inc_which_N*(nn))]) { cmpval = (find_datap)[0+(__inc_find_M*(M))] < (which_datap)[0+(__inc_which_M*(M))+(__inc_which_N*(nn))] ? -1 : 1; break; } }} /* Close M */
    0          
    0          
199             ;
200 0 0         if ((cmpval > 0) == is_asc_sorted)
201 0           nlo=nn;
202             else
203 0           nhi=nn;
204             }
205 0 0         if (nlo==-1) {
206 0           nhi=0;
207 0 0         } else if (nlo==n1) {
208 0           cmpval = 0;
209 0 0         {/* Open M */ PDL_EXPAND2(register PDL_Indx M=0, __M_stop=(__M_size)); for(; M<__M_stop; M+=1) { if ((find_datap)[0+(__inc_find_M*(M))] != (which_datap)[0+(__inc_which_M*(M))+(__inc_which_N*(n1))]) { cmpval = (find_datap)[0+(__inc_find_M*(M))] < (which_datap)[0+(__inc_which_M*(M))+(__inc_which_N*(n1))] ? -1 : 1; break; } }} /* Close M */
    0          
    0          
210             ;
211 0 0         if (cmpval != 0) carp = 1;
212 0           nhi = n1;
213             } else {
214 0           nhi = nlo+1;
215             }
216 0           (found_datap)[0] = nhi;
217 0 0         PDL_BROADCASTLOOP_END_vsearchvec_readdata
    0          
218 0 0         if (carp) warn("some values had to be extrapolated");
219             }
220 0           } break;
221 1           case PDL_L: {
222 1 50         PDL_DECLARE_PARAMS_vsearchvec_1(PDL_Long,L,PDL_Indx,N)
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
223             {
224 1           int carp=0;
225 7 50         PDL_BROADCASTLOOP_START_vsearchvec_readdata
    50          
    50          
    50          
    50          
    100          
    100          
226 4           PDL_Indx n1=__privtrans->ind_sizes[1]-1, nlo=-1, nhi=n1, nn;
227             int cmpval, is_asc_sorted;
228 4           cmpval = 0;
229 4 50         {/* Open M */ PDL_EXPAND2(register PDL_Indx M=0, __M_stop=(__M_size)); for(; M<__M_stop; M+=1) { if ((which_datap)[0+(__inc_which_M*(M))+(__inc_which_N*(n1))] != (which_datap)[0+(__inc_which_M*(M))+(__inc_which_N*(0))]) { cmpval = (which_datap)[0+(__inc_which_M*(M))+(__inc_which_N*(n1))] < (which_datap)[0+(__inc_which_M*(M))+(__inc_which_N*(0))] ? -1 : 1; break; } }} /* Close M */
    50          
    50          
230             ;
231 4           is_asc_sorted = (cmpval > 0);
232 16 100         while (nhi-nlo > 1) {
233 12           nn = (nhi+nlo) >> 1;
234 12           cmpval = 0;
235 29 100         {/* Open M */ PDL_EXPAND2(register PDL_Indx M=0, __M_stop=(__M_size)); for(; M<__M_stop; M+=1) { if ((find_datap)[0+(__inc_find_M*(M))] != (which_datap)[0+(__inc_which_M*(M))+(__inc_which_N*(nn))]) { cmpval = (find_datap)[0+(__inc_find_M*(M))] < (which_datap)[0+(__inc_which_M*(M))+(__inc_which_N*(nn))] ? -1 : 1; break; } }} /* Close M */
    100          
    100          
236             ;
237 12 100         if ((cmpval > 0) == is_asc_sorted)
238 4           nlo=nn;
239             else
240 8           nhi=nn;
241             }
242 4 100         if (nlo==-1) {
243 1           nhi=0;
244 3 50         } else if (nlo==n1) {
245 0           cmpval = 0;
246 0 0         {/* Open M */ PDL_EXPAND2(register PDL_Indx M=0, __M_stop=(__M_size)); for(; M<__M_stop; M+=1) { if ((find_datap)[0+(__inc_find_M*(M))] != (which_datap)[0+(__inc_which_M*(M))+(__inc_which_N*(n1))]) { cmpval = (find_datap)[0+(__inc_find_M*(M))] < (which_datap)[0+(__inc_which_M*(M))+(__inc_which_N*(n1))] ? -1 : 1; break; } }} /* Close M */
    0          
    0          
247             ;
248 0 0         if (cmpval != 0) carp = 1;
249 0           nhi = n1;
250             } else {
251 3           nhi = nlo+1;
252             }
253 4           (found_datap)[0] = nhi;
254 1 50         PDL_BROADCASTLOOP_END_vsearchvec_readdata
    50          
255 1 50         if (carp) warn("some values had to be extrapolated");
256             }
257 1           } break;
258 0           case PDL_UL: {
259 0 0         PDL_DECLARE_PARAMS_vsearchvec_1(PDL_ULong,K,PDL_Indx,N)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
260             {
261 0           int carp=0;
262 0 0         PDL_BROADCASTLOOP_START_vsearchvec_readdata
    0          
    0          
    0          
    0          
    0          
    0          
263 0           PDL_Indx n1=__privtrans->ind_sizes[1]-1, nlo=-1, nhi=n1, nn;
264             int cmpval, is_asc_sorted;
265 0           cmpval = 0;
266 0 0         {/* Open M */ PDL_EXPAND2(register PDL_Indx M=0, __M_stop=(__M_size)); for(; M<__M_stop; M+=1) { if ((which_datap)[0+(__inc_which_M*(M))+(__inc_which_N*(n1))] != (which_datap)[0+(__inc_which_M*(M))+(__inc_which_N*(0))]) { cmpval = (which_datap)[0+(__inc_which_M*(M))+(__inc_which_N*(n1))] < (which_datap)[0+(__inc_which_M*(M))+(__inc_which_N*(0))] ? -1 : 1; break; } }} /* Close M */
    0          
    0          
267             ;
268 0           is_asc_sorted = (cmpval > 0);
269 0 0         while (nhi-nlo > 1) {
270 0           nn = (nhi+nlo) >> 1;
271 0           cmpval = 0;
272 0 0         {/* Open M */ PDL_EXPAND2(register PDL_Indx M=0, __M_stop=(__M_size)); for(; M<__M_stop; M+=1) { if ((find_datap)[0+(__inc_find_M*(M))] != (which_datap)[0+(__inc_which_M*(M))+(__inc_which_N*(nn))]) { cmpval = (find_datap)[0+(__inc_find_M*(M))] < (which_datap)[0+(__inc_which_M*(M))+(__inc_which_N*(nn))] ? -1 : 1; break; } }} /* Close M */
    0          
    0          
273             ;
274 0 0         if ((cmpval > 0) == is_asc_sorted)
275 0           nlo=nn;
276             else
277 0           nhi=nn;
278             }
279 0 0         if (nlo==-1) {
280 0           nhi=0;
281 0 0         } else if (nlo==n1) {
282 0           cmpval = 0;
283 0 0         {/* Open M */ PDL_EXPAND2(register PDL_Indx M=0, __M_stop=(__M_size)); for(; M<__M_stop; M+=1) { if ((find_datap)[0+(__inc_find_M*(M))] != (which_datap)[0+(__inc_which_M*(M))+(__inc_which_N*(n1))]) { cmpval = (find_datap)[0+(__inc_find_M*(M))] < (which_datap)[0+(__inc_which_M*(M))+(__inc_which_N*(n1))] ? -1 : 1; break; } }} /* Close M */
    0          
    0          
284             ;
285 0 0         if (cmpval != 0) carp = 1;
286 0           nhi = n1;
287             } else {
288 0           nhi = nlo+1;
289             }
290 0           (found_datap)[0] = nhi;
291 0 0         PDL_BROADCASTLOOP_END_vsearchvec_readdata
    0          
292 0 0         if (carp) warn("some values had to be extrapolated");
293             }
294 0           } break;
295 0           case PDL_IND: {
296 0 0         PDL_DECLARE_PARAMS_vsearchvec_1(PDL_Indx,N,PDL_Indx,N)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
297             {
298 0           int carp=0;
299 0 0         PDL_BROADCASTLOOP_START_vsearchvec_readdata
    0          
    0          
    0          
    0          
    0          
    0          
300 0           PDL_Indx n1=__privtrans->ind_sizes[1]-1, nlo=-1, nhi=n1, nn;
301             int cmpval, is_asc_sorted;
302 0           cmpval = 0;
303 0 0         {/* Open M */ PDL_EXPAND2(register PDL_Indx M=0, __M_stop=(__M_size)); for(; M<__M_stop; M+=1) { if ((which_datap)[0+(__inc_which_M*(M))+(__inc_which_N*(n1))] != (which_datap)[0+(__inc_which_M*(M))+(__inc_which_N*(0))]) { cmpval = (which_datap)[0+(__inc_which_M*(M))+(__inc_which_N*(n1))] < (which_datap)[0+(__inc_which_M*(M))+(__inc_which_N*(0))] ? -1 : 1; break; } }} /* Close M */
    0          
    0          
304             ;
305 0           is_asc_sorted = (cmpval > 0);
306 0 0         while (nhi-nlo > 1) {
307 0           nn = (nhi+nlo) >> 1;
308 0           cmpval = 0;
309 0 0         {/* Open M */ PDL_EXPAND2(register PDL_Indx M=0, __M_stop=(__M_size)); for(; M<__M_stop; M+=1) { if ((find_datap)[0+(__inc_find_M*(M))] != (which_datap)[0+(__inc_which_M*(M))+(__inc_which_N*(nn))]) { cmpval = (find_datap)[0+(__inc_find_M*(M))] < (which_datap)[0+(__inc_which_M*(M))+(__inc_which_N*(nn))] ? -1 : 1; break; } }} /* Close M */
    0          
    0          
310             ;
311 0 0         if ((cmpval > 0) == is_asc_sorted)
312 0           nlo=nn;
313             else
314 0           nhi=nn;
315             }
316 0 0         if (nlo==-1) {
317 0           nhi=0;
318 0 0         } else if (nlo==n1) {
319 0           cmpval = 0;
320 0 0         {/* Open M */ PDL_EXPAND2(register PDL_Indx M=0, __M_stop=(__M_size)); for(; M<__M_stop; M+=1) { if ((find_datap)[0+(__inc_find_M*(M))] != (which_datap)[0+(__inc_which_M*(M))+(__inc_which_N*(n1))]) { cmpval = (find_datap)[0+(__inc_find_M*(M))] < (which_datap)[0+(__inc_which_M*(M))+(__inc_which_N*(n1))] ? -1 : 1; break; } }} /* Close M */
    0          
    0          
321             ;
322 0 0         if (cmpval != 0) carp = 1;
323 0           nhi = n1;
324             } else {
325 0           nhi = nlo+1;
326             }
327 0           (found_datap)[0] = nhi;
328 0 0         PDL_BROADCASTLOOP_END_vsearchvec_readdata
    0          
329 0 0         if (carp) warn("some values had to be extrapolated");
330             }
331 0           } break;
332 0           case PDL_ULL: {
333 0 0         PDL_DECLARE_PARAMS_vsearchvec_1(PDL_ULongLong,P,PDL_Indx,N)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
334             {
335 0           int carp=0;
336 0 0         PDL_BROADCASTLOOP_START_vsearchvec_readdata
    0          
    0          
    0          
    0          
    0          
    0          
337 0           PDL_Indx n1=__privtrans->ind_sizes[1]-1, nlo=-1, nhi=n1, nn;
338             int cmpval, is_asc_sorted;
339 0           cmpval = 0;
340 0 0         {/* Open M */ PDL_EXPAND2(register PDL_Indx M=0, __M_stop=(__M_size)); for(; M<__M_stop; M+=1) { if ((which_datap)[0+(__inc_which_M*(M))+(__inc_which_N*(n1))] != (which_datap)[0+(__inc_which_M*(M))+(__inc_which_N*(0))]) { cmpval = (which_datap)[0+(__inc_which_M*(M))+(__inc_which_N*(n1))] < (which_datap)[0+(__inc_which_M*(M))+(__inc_which_N*(0))] ? -1 : 1; break; } }} /* Close M */
    0          
    0          
341             ;
342 0           is_asc_sorted = (cmpval > 0);
343 0 0         while (nhi-nlo > 1) {
344 0           nn = (nhi+nlo) >> 1;
345 0           cmpval = 0;
346 0 0         {/* Open M */ PDL_EXPAND2(register PDL_Indx M=0, __M_stop=(__M_size)); for(; M<__M_stop; M+=1) { if ((find_datap)[0+(__inc_find_M*(M))] != (which_datap)[0+(__inc_which_M*(M))+(__inc_which_N*(nn))]) { cmpval = (find_datap)[0+(__inc_find_M*(M))] < (which_datap)[0+(__inc_which_M*(M))+(__inc_which_N*(nn))] ? -1 : 1; break; } }} /* Close M */
    0          
    0          
347             ;
348 0 0         if ((cmpval > 0) == is_asc_sorted)
349 0           nlo=nn;
350             else
351 0           nhi=nn;
352             }
353 0 0         if (nlo==-1) {
354 0           nhi=0;
355 0 0         } else if (nlo==n1) {
356 0           cmpval = 0;
357 0 0         {/* Open M */ PDL_EXPAND2(register PDL_Indx M=0, __M_stop=(__M_size)); for(; M<__M_stop; M+=1) { if ((find_datap)[0+(__inc_find_M*(M))] != (which_datap)[0+(__inc_which_M*(M))+(__inc_which_N*(n1))]) { cmpval = (find_datap)[0+(__inc_find_M*(M))] < (which_datap)[0+(__inc_which_M*(M))+(__inc_which_N*(n1))] ? -1 : 1; break; } }} /* Close M */
    0          
    0          
358             ;
359 0 0         if (cmpval != 0) carp = 1;
360 0           nhi = n1;
361             } else {
362 0           nhi = nlo+1;
363             }
364 0           (found_datap)[0] = nhi;
365 0 0         PDL_BROADCASTLOOP_END_vsearchvec_readdata
    0          
366 0 0         if (carp) warn("some values had to be extrapolated");
367             }
368 0           } break;
369 0           case PDL_LL: {
370 0 0         PDL_DECLARE_PARAMS_vsearchvec_1(PDL_LongLong,Q,PDL_Indx,N)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
371             {
372 0           int carp=0;
373 0 0         PDL_BROADCASTLOOP_START_vsearchvec_readdata
    0          
    0          
    0          
    0          
    0          
    0          
374 0           PDL_Indx n1=__privtrans->ind_sizes[1]-1, nlo=-1, nhi=n1, nn;
375             int cmpval, is_asc_sorted;
376 0           cmpval = 0;
377 0 0         {/* Open M */ PDL_EXPAND2(register PDL_Indx M=0, __M_stop=(__M_size)); for(; M<__M_stop; M+=1) { if ((which_datap)[0+(__inc_which_M*(M))+(__inc_which_N*(n1))] != (which_datap)[0+(__inc_which_M*(M))+(__inc_which_N*(0))]) { cmpval = (which_datap)[0+(__inc_which_M*(M))+(__inc_which_N*(n1))] < (which_datap)[0+(__inc_which_M*(M))+(__inc_which_N*(0))] ? -1 : 1; break; } }} /* Close M */
    0          
    0          
378             ;
379 0           is_asc_sorted = (cmpval > 0);
380 0 0         while (nhi-nlo > 1) {
381 0           nn = (nhi+nlo) >> 1;
382 0           cmpval = 0;
383 0 0         {/* Open M */ PDL_EXPAND2(register PDL_Indx M=0, __M_stop=(__M_size)); for(; M<__M_stop; M+=1) { if ((find_datap)[0+(__inc_find_M*(M))] != (which_datap)[0+(__inc_which_M*(M))+(__inc_which_N*(nn))]) { cmpval = (find_datap)[0+(__inc_find_M*(M))] < (which_datap)[0+(__inc_which_M*(M))+(__inc_which_N*(nn))] ? -1 : 1; break; } }} /* Close M */
    0          
    0          
384             ;
385 0 0         if ((cmpval > 0) == is_asc_sorted)
386 0           nlo=nn;
387             else
388 0           nhi=nn;
389             }
390 0 0         if (nlo==-1) {
391 0           nhi=0;
392 0 0         } else if (nlo==n1) {
393 0           cmpval = 0;
394 0 0         {/* Open M */ PDL_EXPAND2(register PDL_Indx M=0, __M_stop=(__M_size)); for(; M<__M_stop; M+=1) { if ((find_datap)[0+(__inc_find_M*(M))] != (which_datap)[0+(__inc_which_M*(M))+(__inc_which_N*(n1))]) { cmpval = (find_datap)[0+(__inc_find_M*(M))] < (which_datap)[0+(__inc_which_M*(M))+(__inc_which_N*(n1))] ? -1 : 1; break; } }} /* Close M */
    0          
    0          
395             ;
396 0 0         if (cmpval != 0) carp = 1;
397 0           nhi = n1;
398             } else {
399 0           nhi = nlo+1;
400             }
401 0           (found_datap)[0] = nhi;
402 0 0         PDL_BROADCASTLOOP_END_vsearchvec_readdata
    0          
403 0 0         if (carp) warn("some values had to be extrapolated");
404             }
405 0           } break;
406 4           case PDL_F: {
407 4 100         PDL_DECLARE_PARAMS_vsearchvec_1(PDL_Float,F,PDL_Indx,N)
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
408             {
409 4           int carp=0;
410 128 50         PDL_BROADCASTLOOP_START_vsearchvec_readdata
    50          
    50          
    50          
    50          
    100          
    100          
411 90           PDL_Indx n1=__privtrans->ind_sizes[1]-1, nlo=-1, nhi=n1, nn;
412             int cmpval, is_asc_sorted;
413 90           cmpval = 0;
414 90 50         {/* Open M */ PDL_EXPAND2(register PDL_Indx M=0, __M_stop=(__M_size)); for(; M<__M_stop; M+=1) { if ((which_datap)[0+(__inc_which_M*(M))+(__inc_which_N*(n1))] != (which_datap)[0+(__inc_which_M*(M))+(__inc_which_N*(0))]) { cmpval = (which_datap)[0+(__inc_which_M*(M))+(__inc_which_N*(n1))] < (which_datap)[0+(__inc_which_M*(M))+(__inc_which_N*(0))] ? -1 : 1; break; } }} /* Close M */
    50          
    50          
415             ;
416 90           is_asc_sorted = (cmpval > 0);
417 356 100         while (nhi-nlo > 1) {
418 266           nn = (nhi+nlo) >> 1;
419 266           cmpval = 0;
420 678 100         {/* Open M */ PDL_EXPAND2(register PDL_Indx M=0, __M_stop=(__M_size)); for(; M<__M_stop; M+=1) { if ((find_datap)[0+(__inc_find_M*(M))] != (which_datap)[0+(__inc_which_M*(M))+(__inc_which_N*(nn))]) { cmpval = (find_datap)[0+(__inc_find_M*(M))] < (which_datap)[0+(__inc_which_M*(M))+(__inc_which_N*(nn))] ? -1 : 1; break; } }} /* Close M */
    100          
    100          
421             ;
422 266 100         if ((cmpval > 0) == is_asc_sorted)
423 136           nlo=nn;
424             else
425 130           nhi=nn;
426             }
427 90 100         if (nlo==-1) {
428 14           nhi=0;
429 76 50         } else if (nlo==n1) {
430 0           cmpval = 0;
431 0 0         {/* Open M */ PDL_EXPAND2(register PDL_Indx M=0, __M_stop=(__M_size)); for(; M<__M_stop; M+=1) { if ((find_datap)[0+(__inc_find_M*(M))] != (which_datap)[0+(__inc_which_M*(M))+(__inc_which_N*(n1))]) { cmpval = (find_datap)[0+(__inc_find_M*(M))] < (which_datap)[0+(__inc_which_M*(M))+(__inc_which_N*(n1))] ? -1 : 1; break; } }} /* Close M */
    0          
    0          
432             ;
433 0 0         if (cmpval != 0) carp = 1;
434 0           nhi = n1;
435             } else {
436 76           nhi = nlo+1;
437             }
438 90           (found_datap)[0] = nhi;
439 4 50         PDL_BROADCASTLOOP_END_vsearchvec_readdata
    50          
440 4 50         if (carp) warn("some values had to be extrapolated");
441             }
442 4           } break;
443 2           case PDL_D: {
444 2 50         PDL_DECLARE_PARAMS_vsearchvec_1(PDL_Double,D,PDL_Indx,N)
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
445             {
446 2           int carp=0;
447 8 50         PDL_BROADCASTLOOP_START_vsearchvec_readdata
    50          
    50          
    50          
    50          
    100          
    100          
448 2           PDL_Indx n1=__privtrans->ind_sizes[1]-1, nlo=-1, nhi=n1, nn;
449             int cmpval, is_asc_sorted;
450 2           cmpval = 0;
451 2 50         {/* Open M */ PDL_EXPAND2(register PDL_Indx M=0, __M_stop=(__M_size)); for(; M<__M_stop; M+=1) { if ((which_datap)[0+(__inc_which_M*(M))+(__inc_which_N*(n1))] != (which_datap)[0+(__inc_which_M*(M))+(__inc_which_N*(0))]) { cmpval = (which_datap)[0+(__inc_which_M*(M))+(__inc_which_N*(n1))] < (which_datap)[0+(__inc_which_M*(M))+(__inc_which_N*(0))] ? -1 : 1; break; } }} /* Close M */
    50          
    50          
452             ;
453 2           is_asc_sorted = (cmpval > 0);
454 8 100         while (nhi-nlo > 1) {
455 6           nn = (nhi+nlo) >> 1;
456 6           cmpval = 0;
457 6 50         {/* Open M */ PDL_EXPAND2(register PDL_Indx M=0, __M_stop=(__M_size)); for(; M<__M_stop; M+=1) { if ((find_datap)[0+(__inc_find_M*(M))] != (which_datap)[0+(__inc_which_M*(M))+(__inc_which_N*(nn))]) { cmpval = (find_datap)[0+(__inc_find_M*(M))] < (which_datap)[0+(__inc_which_M*(M))+(__inc_which_N*(nn))] ? -1 : 1; break; } }} /* Close M */
    100          
    50          
458             ;
459 6 100         if ((cmpval > 0) == is_asc_sorted)
460 3           nlo=nn;
461             else
462 3           nhi=nn;
463             }
464 2 100         if (nlo==-1) {
465 1           nhi=0;
466 1 50         } else if (nlo==n1) {
467 0           cmpval = 0;
468 0 0         {/* Open M */ PDL_EXPAND2(register PDL_Indx M=0, __M_stop=(__M_size)); for(; M<__M_stop; M+=1) { if ((find_datap)[0+(__inc_find_M*(M))] != (which_datap)[0+(__inc_which_M*(M))+(__inc_which_N*(n1))]) { cmpval = (find_datap)[0+(__inc_find_M*(M))] < (which_datap)[0+(__inc_which_M*(M))+(__inc_which_N*(n1))] ? -1 : 1; break; } }} /* Close M */
    0          
    0          
469             ;
470 0 0         if (cmpval != 0) carp = 1;
471 0           nhi = n1;
472             } else {
473 1           nhi = nlo+1;
474             }
475 2           (found_datap)[0] = nhi;
476 2 50         PDL_BROADCASTLOOP_END_vsearchvec_readdata
    50          
477 2 50         if (carp) warn("some values had to be extrapolated");
478             }
479 2           } break;
480 0           case PDL_LD: {
481 0 0         PDL_DECLARE_PARAMS_vsearchvec_1(PDL_LDouble,E,PDL_Indx,N)
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
482             {
483 0           int carp=0;
484 0 0         PDL_BROADCASTLOOP_START_vsearchvec_readdata
    0          
    0          
    0          
    0          
    0          
    0          
485 0           PDL_Indx n1=__privtrans->ind_sizes[1]-1, nlo=-1, nhi=n1, nn;
486             int cmpval, is_asc_sorted;
487 0           cmpval = 0;
488 0 0         {/* Open M */ PDL_EXPAND2(register PDL_Indx M=0, __M_stop=(__M_size)); for(; M<__M_stop; M+=1) { if ((which_datap)[0+(__inc_which_M*(M))+(__inc_which_N*(n1))] != (which_datap)[0+(__inc_which_M*(M))+(__inc_which_N*(0))]) { cmpval = (which_datap)[0+(__inc_which_M*(M))+(__inc_which_N*(n1))] < (which_datap)[0+(__inc_which_M*(M))+(__inc_which_N*(0))] ? -1 : 1; break; } }} /* Close M */
    0          
    0          
489             ;
490 0           is_asc_sorted = (cmpval > 0);
491 0 0         while (nhi-nlo > 1) {
492 0           nn = (nhi+nlo) >> 1;
493 0           cmpval = 0;
494 0 0         {/* Open M */ PDL_EXPAND2(register PDL_Indx M=0, __M_stop=(__M_size)); for(; M<__M_stop; M+=1) { if ((find_datap)[0+(__inc_find_M*(M))] != (which_datap)[0+(__inc_which_M*(M))+(__inc_which_N*(nn))]) { cmpval = (find_datap)[0+(__inc_find_M*(M))] < (which_datap)[0+(__inc_which_M*(M))+(__inc_which_N*(nn))] ? -1 : 1; break; } }} /* Close M */
    0          
    0          
495             ;
496 0 0         if ((cmpval > 0) == is_asc_sorted)
497 0           nlo=nn;
498             else
499 0           nhi=nn;
500             }
501 0 0         if (nlo==-1) {
502 0           nhi=0;
503 0 0         } else if (nlo==n1) {
504 0           cmpval = 0;
505 0 0         {/* Open M */ PDL_EXPAND2(register PDL_Indx M=0, __M_stop=(__M_size)); for(; M<__M_stop; M+=1) { if ((find_datap)[0+(__inc_find_M*(M))] != (which_datap)[0+(__inc_which_M*(M))+(__inc_which_N*(n1))]) { cmpval = (find_datap)[0+(__inc_find_M*(M))] < (which_datap)[0+(__inc_which_M*(M))+(__inc_which_N*(n1))] ? -1 : 1; break; } }} /* Close M */
    0          
    0          
506             ;
507 0 0         if (cmpval != 0) carp = 1;
508 0           nhi = n1;
509             } else {
510 0           nhi = nlo+1;
511             }
512 0           (found_datap)[0] = nhi;
513 0 0         PDL_BROADCASTLOOP_END_vsearchvec_readdata
    0          
514 0 0         if (carp) warn("some values had to be extrapolated");
515             }
516 0           } break;
517 0           default: return PDL->make_error(PDL_EUSERERROR, "PP INTERNAL ERROR in vsearchvec: unhandled datatype(%d), only handles (ABSULKNPQFDE)! PLEASE MAKE A BUG REPORT\n", __privtrans->__datatype);
518             }
519             #undef PDL_IF_BAD
520 7           return PDL_err;
521             }
522              
523             static pdl_datatypes pdl_vsearchvec_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 };
524             static PDL_Indx pdl_vsearchvec_vtable_realdims[] = { 1, 2, 0 };
525             static char *pdl_vsearchvec_vtable_parnames[] = { "find","which","found" };
526             static short pdl_vsearchvec_vtable_parflags[] = {
527             0,
528             0,
529             PDL_PARAM_ISCREAT|PDL_PARAM_ISOUT|PDL_PARAM_ISTYPED|PDL_PARAM_ISWRITE
530             };
531             static pdl_datatypes pdl_vsearchvec_vtable_partypes[] = { -1, -1, PDL_IND };
532             static PDL_Indx pdl_vsearchvec_vtable_realdims_starts[] = { 0, 1, 3 };
533             static PDL_Indx pdl_vsearchvec_vtable_realdims_ind_ids[] = { 0, 0, 1 };
534             static char *pdl_vsearchvec_vtable_indnames[] = { "M","N" };
535             pdl_transvtable pdl_vsearchvec_vtable = {
536             PDL_TRANS_DO_BROADCAST, 0, pdl_vsearchvec_vtable_gentypes, 2, 3, NULL /*CORE21*/,
537             pdl_vsearchvec_vtable_realdims, pdl_vsearchvec_vtable_parnames,
538             pdl_vsearchvec_vtable_parflags, pdl_vsearchvec_vtable_partypes,
539             pdl_vsearchvec_vtable_realdims_starts, pdl_vsearchvec_vtable_realdims_ind_ids, 3,
540             2, pdl_vsearchvec_vtable_indnames,
541             NULL, pdl_vsearchvec_readdata, NULL,
542             NULL,
543             0,"PDL::Primitive::vsearchvec"
544             };
545              
546              
547 7           pdl_error pdl_run_vsearchvec(pdl *find,pdl *which,pdl *found) {
548 7           pdl_error PDL_err = {0, NULL, 0};
549 7 50         if (!PDL) return (pdl_error){PDL_EFATAL, "PDL core struct is NULL, can't continue",0};
550 7           pdl_trans *__privtrans = PDL->create_trans(&pdl_vsearchvec_vtable);
551 7 50         if (!__privtrans) return PDL->make_error_simple(PDL_EFATAL, "Couldn't create trans");
552 7           __privtrans->pdls[0] = find;
553 7           __privtrans->pdls[1] = which;
554 7           __privtrans->pdls[2] = found;
555 7 50         PDL_RETERROR(PDL_err, PDL->type_coerce(__privtrans));
556 7 50         PDL_RETERROR(PDL_err, PDL->make_trans_mutual(__privtrans));
557 7           return PDL_err;
558             }