Line data Source code
1 : /*
2 : * SPDX-License-Identifier: MPL-2.0
3 : *
4 : * This Source Code Form is subject to the terms of the Mozilla Public
5 : * License, v. 2.0. If a copy of the MPL was not distributed with this
6 : * file, You can obtain one at http://mozilla.org/MPL/2.0/.
7 : *
8 : * Copyright 2024 MonetDB Foundation;
9 : * Copyright August 2008 - 2023 MonetDB B.V.;
10 : * Copyright 1997 - July 2008 CWI.
11 : */
12 :
13 : #include "monetdb_config.h"
14 : #include "gdk.h"
15 : #include "gdk_private.h"
16 : #include "gdk_calc_private.h"
17 :
18 : /* ---------------------------------------------------------------------- */
19 : /* modulo (any numeric type) */
20 :
21 : #define MOD_3TYPE(TYPE1, TYPE2, TYPE3) \
22 : static BUN \
23 : mod_##TYPE1##_##TYPE2##_##TYPE3(const TYPE1 *lft, bool incr1, \
24 : const TYPE2 *rgt, bool incr2, \
25 : TYPE3 *restrict dst, \
26 : struct canditer *restrict ci1, \
27 : struct canditer *restrict ci2, \
28 : oid candoff1, oid candoff2) \
29 : { \
30 : BUN nils = 0; \
31 : BUN i = 0, j = 0, ncand = ci1->ncand; \
32 : QryCtx *qry_ctx = MT_thread_get_qry_ctx(); \
33 : \
34 : if (ci1->tpe == cand_dense && ci2->tpe == cand_dense) { \
35 : TIMEOUT_LOOP_IDX_DECL(k, ncand, qry_ctx) { \
36 : if (incr1) \
37 : i = canditer_next_dense(ci1) - candoff1; \
38 : if (incr2) \
39 : j = canditer_next_dense(ci2) - candoff2; \
40 : if (is_##TYPE1##_nil(lft[i]) || is_##TYPE2##_nil(rgt[j])) { \
41 : dst[k] = TYPE3##_nil; \
42 : nils++; \
43 : } else if (rgt[j] == 0) { \
44 : return BUN_NONE + 1; \
45 : } else { \
46 : dst[k] = (TYPE3) lft[i] % rgt[j]; \
47 : } \
48 : } \
49 : TIMEOUT_CHECK(qry_ctx, TIMEOUT_HANDLER(BUN_NONE, qry_ctx)); \
50 : } else { \
51 : TIMEOUT_LOOP_IDX_DECL(k, ncand, qry_ctx) { \
52 : if (incr1) \
53 : i = canditer_next(ci1) - candoff1; \
54 : if (incr2) \
55 : j = canditer_next(ci2) - candoff2; \
56 : if (is_##TYPE1##_nil(lft[i]) || is_##TYPE2##_nil(rgt[j])) { \
57 : dst[k] = TYPE3##_nil; \
58 : nils++; \
59 : } else if (rgt[j] == 0) { \
60 : return BUN_NONE + 1; \
61 : } else { \
62 : dst[k] = (TYPE3) lft[i] % rgt[j]; \
63 : } \
64 : } \
65 : TIMEOUT_CHECK(qry_ctx, TIMEOUT_HANDLER(BUN_NONE, qry_ctx)); \
66 : } \
67 : return nils; \
68 : }
69 :
70 : #define FMOD_3TYPE(TYPE1, TYPE2, TYPE3, FUNC) \
71 : static BUN \
72 : mod_##TYPE1##_##TYPE2##_##TYPE3(const TYPE1 *lft, bool incr1, \
73 : const TYPE2 *rgt, bool incr2, \
74 : TYPE3 *restrict dst, \
75 : struct canditer *restrict ci1, \
76 : struct canditer *restrict ci2, \
77 : oid candoff1, oid candoff2) \
78 : { \
79 : BUN nils = 0; \
80 : BUN i = 0, j = 0, ncand = ci1->ncand; \
81 : QryCtx *qry_ctx = MT_thread_get_qry_ctx(); \
82 : \
83 : if (ci1->tpe == cand_dense && ci2->tpe == cand_dense) { \
84 : TIMEOUT_LOOP_IDX_DECL(k, ncand, qry_ctx) { \
85 : if (incr1) \
86 : i = canditer_next_dense(ci1) - candoff1; \
87 : if (incr2) \
88 : j = canditer_next_dense(ci2) - candoff2; \
89 : if (is_##TYPE1##_nil(lft[i]) || is_##TYPE2##_nil(rgt[j])) { \
90 : dst[k] = TYPE3##_nil; \
91 : nils++; \
92 : } else if (rgt[j] == 0) { \
93 : return BUN_NONE + 1; \
94 : } else { \
95 : dst[k] = (TYPE3) FUNC((TYPE3) lft[i], \
96 : (TYPE3) rgt[j]); \
97 : } \
98 : } \
99 : TIMEOUT_CHECK(qry_ctx, TIMEOUT_HANDLER(BUN_NONE, qry_ctx)); \
100 : } else { \
101 : TIMEOUT_LOOP_IDX_DECL(k, ncand, qry_ctx) { \
102 : if (incr1) \
103 : i = canditer_next(ci1) - candoff1; \
104 : if (incr2) \
105 : j = canditer_next(ci2) - candoff2; \
106 : if (is_##TYPE1##_nil(lft[i]) || is_##TYPE2##_nil(rgt[j])) { \
107 : dst[k] = TYPE3##_nil; \
108 : nils++; \
109 : } else if (rgt[j] == 0) { \
110 : return BUN_NONE + 1; \
111 : } else { \
112 : dst[k] = (TYPE3) FUNC((TYPE3) lft[i], \
113 : (TYPE3) rgt[j]); \
114 : } \
115 : } \
116 : TIMEOUT_CHECK(qry_ctx, TIMEOUT_HANDLER(BUN_NONE, qry_ctx)); \
117 : } \
118 : return nils; \
119 : }
120 :
121 232 : MOD_3TYPE(bte, bte, bte)
122 0 : MOD_3TYPE(bte, bte, sht)
123 0 : MOD_3TYPE(bte, bte, int)
124 0 : MOD_3TYPE(bte, bte, lng)
125 : #ifdef HAVE_HGE
126 0 : MOD_3TYPE(bte, bte, hge)
127 : #endif
128 0 : MOD_3TYPE(bte, sht, bte)
129 0 : MOD_3TYPE(bte, sht, sht)
130 0 : MOD_3TYPE(bte, sht, int)
131 0 : MOD_3TYPE(bte, sht, lng)
132 : #ifdef HAVE_HGE
133 0 : MOD_3TYPE(bte, sht, hge)
134 : #endif
135 0 : MOD_3TYPE(bte, int, bte)
136 0 : MOD_3TYPE(bte, int, sht)
137 0 : MOD_3TYPE(bte, int, int)
138 0 : MOD_3TYPE(bte, int, lng)
139 : #ifdef HAVE_HGE
140 0 : MOD_3TYPE(bte, int, hge)
141 : #endif
142 0 : MOD_3TYPE(bte, lng, bte)
143 0 : MOD_3TYPE(bte, lng, sht)
144 0 : MOD_3TYPE(bte, lng, int)
145 0 : MOD_3TYPE(bte, lng, lng)
146 : #ifdef HAVE_HGE
147 0 : MOD_3TYPE(bte, lng, hge)
148 : #endif
149 : #ifdef HAVE_HGE
150 0 : MOD_3TYPE(bte, hge, bte)
151 0 : MOD_3TYPE(bte, hge, sht)
152 0 : MOD_3TYPE(bte, hge, int)
153 0 : MOD_3TYPE(bte, hge, lng)
154 0 : MOD_3TYPE(bte, hge, hge)
155 : #endif
156 0 : MOD_3TYPE(sht, bte, bte)
157 8 : MOD_3TYPE(sht, bte, sht)
158 0 : MOD_3TYPE(sht, bte, int)
159 0 : MOD_3TYPE(sht, bte, lng)
160 : #ifdef HAVE_HGE
161 0 : MOD_3TYPE(sht, bte, hge)
162 : #endif
163 24 : MOD_3TYPE(sht, sht, sht)
164 0 : MOD_3TYPE(sht, sht, int)
165 0 : MOD_3TYPE(sht, sht, lng)
166 : #ifdef HAVE_HGE
167 0 : MOD_3TYPE(sht, sht, hge)
168 : #endif
169 0 : MOD_3TYPE(sht, int, sht)
170 0 : MOD_3TYPE(sht, int, int)
171 0 : MOD_3TYPE(sht, int, lng)
172 : #ifdef HAVE_HGE
173 0 : MOD_3TYPE(sht, int, hge)
174 : #endif
175 0 : MOD_3TYPE(sht, lng, sht)
176 0 : MOD_3TYPE(sht, lng, int)
177 0 : MOD_3TYPE(sht, lng, lng)
178 : #ifdef HAVE_HGE
179 0 : MOD_3TYPE(sht, lng, hge)
180 : #endif
181 : #ifdef HAVE_HGE
182 0 : MOD_3TYPE(sht, hge, sht)
183 0 : MOD_3TYPE(sht, hge, int)
184 0 : MOD_3TYPE(sht, hge, lng)
185 0 : MOD_3TYPE(sht, hge, hge)
186 : #endif
187 0 : MOD_3TYPE(int, bte, bte)
188 0 : MOD_3TYPE(int, bte, sht)
189 0 : MOD_3TYPE(int, bte, int)
190 0 : MOD_3TYPE(int, bte, lng)
191 : #ifdef HAVE_HGE
192 0 : MOD_3TYPE(int, bte, hge)
193 : #endif
194 0 : MOD_3TYPE(int, sht, sht)
195 0 : MOD_3TYPE(int, sht, int)
196 0 : MOD_3TYPE(int, sht, lng)
197 : #ifdef HAVE_HGE
198 0 : MOD_3TYPE(int, sht, hge)
199 : #endif
200 20041803 : MOD_3TYPE(int, int, int)
201 0 : MOD_3TYPE(int, int, lng)
202 : #ifdef HAVE_HGE
203 0 : MOD_3TYPE(int, int, hge)
204 : #endif
205 0 : MOD_3TYPE(int, lng, int)
206 0 : MOD_3TYPE(int, lng, lng)
207 : #ifdef HAVE_HGE
208 0 : MOD_3TYPE(int, lng, hge)
209 : #endif
210 : #ifdef HAVE_HGE
211 0 : MOD_3TYPE(int, hge, int)
212 0 : MOD_3TYPE(int, hge, lng)
213 0 : MOD_3TYPE(int, hge, hge)
214 : #endif
215 0 : MOD_3TYPE(lng, bte, bte)
216 0 : MOD_3TYPE(lng, bte, sht)
217 0 : MOD_3TYPE(lng, bte, int)
218 0 : MOD_3TYPE(lng, bte, lng)
219 : #ifdef HAVE_HGE
220 0 : MOD_3TYPE(lng, bte, hge)
221 : #endif
222 0 : MOD_3TYPE(lng, sht, sht)
223 0 : MOD_3TYPE(lng, sht, int)
224 0 : MOD_3TYPE(lng, sht, lng)
225 : #ifdef HAVE_HGE
226 0 : MOD_3TYPE(lng, sht, hge)
227 : #endif
228 0 : MOD_3TYPE(lng, int, int)
229 0 : MOD_3TYPE(lng, int, lng)
230 : #ifdef HAVE_HGE
231 0 : MOD_3TYPE(lng, int, hge)
232 : #endif
233 82 : MOD_3TYPE(lng, lng, lng)
234 : #ifdef HAVE_HGE
235 0 : MOD_3TYPE(lng, lng, hge)
236 : #endif
237 : #ifdef HAVE_HGE
238 0 : MOD_3TYPE(lng, hge, lng)
239 0 : MOD_3TYPE(lng, hge, hge)
240 : #endif
241 : #ifdef HAVE_HGE
242 0 : MOD_3TYPE(hge, bte, bte)
243 0 : MOD_3TYPE(hge, bte, sht)
244 0 : MOD_3TYPE(hge, bte, int)
245 0 : MOD_3TYPE(hge, bte, lng)
246 0 : MOD_3TYPE(hge, bte, hge)
247 0 : MOD_3TYPE(hge, sht, sht)
248 0 : MOD_3TYPE(hge, sht, int)
249 0 : MOD_3TYPE(hge, sht, lng)
250 0 : MOD_3TYPE(hge, sht, hge)
251 0 : MOD_3TYPE(hge, int, int)
252 0 : MOD_3TYPE(hge, int, lng)
253 0 : MOD_3TYPE(hge, int, hge)
254 0 : MOD_3TYPE(hge, lng, lng)
255 0 : MOD_3TYPE(hge, lng, hge)
256 24943020 : MOD_3TYPE(hge, hge, hge)
257 : #endif
258 :
259 0 : FMOD_3TYPE(bte, flt, flt, fmodf)
260 0 : FMOD_3TYPE(sht, flt, flt, fmodf)
261 0 : FMOD_3TYPE(int, flt, flt, fmodf)
262 0 : FMOD_3TYPE(lng, flt, flt, fmodf)
263 : #ifdef HAVE_HGE
264 0 : FMOD_3TYPE(hge, flt, flt, fmodf)
265 : #endif
266 0 : FMOD_3TYPE(flt, bte, flt, fmodf)
267 0 : FMOD_3TYPE(flt, sht, flt, fmodf)
268 0 : FMOD_3TYPE(flt, int, flt, fmodf)
269 0 : FMOD_3TYPE(flt, lng, flt, fmodf)
270 : #ifdef HAVE_HGE
271 0 : FMOD_3TYPE(flt, hge, flt, fmodf)
272 : #endif
273 7 : FMOD_3TYPE(flt, flt, flt, fmodf)
274 0 : FMOD_3TYPE(bte, dbl, dbl, fmod)
275 0 : FMOD_3TYPE(sht, dbl, dbl, fmod)
276 0 : FMOD_3TYPE(int, dbl, dbl, fmod)
277 0 : FMOD_3TYPE(lng, dbl, dbl, fmod)
278 : #ifdef HAVE_HGE
279 0 : FMOD_3TYPE(hge, dbl, dbl, fmod)
280 : #endif
281 0 : FMOD_3TYPE(flt, dbl, dbl, fmod)
282 0 : FMOD_3TYPE(dbl, bte, dbl, fmod)
283 0 : FMOD_3TYPE(dbl, sht, dbl, fmod)
284 0 : FMOD_3TYPE(dbl, int, dbl, fmod)
285 0 : FMOD_3TYPE(dbl, lng, dbl, fmod)
286 : #ifdef HAVE_HGE
287 0 : FMOD_3TYPE(dbl, hge, dbl, fmod)
288 : #endif
289 0 : FMOD_3TYPE(dbl, flt, dbl, fmod)
290 80 : FMOD_3TYPE(dbl, dbl, dbl, fmod)
291 :
292 : static BUN
293 630 : mod_typeswitchloop(const void *lft, int tp1, bool incr1,
294 : const void *rgt, int tp2, bool incr2,
295 : void *restrict dst, int tp,
296 : struct canditer *restrict ci1, struct canditer *restrict ci2,
297 : oid candoff1, oid candoff2, const char *func)
298 : {
299 630 : BUN nils;
300 :
301 630 : tp1 = ATOMbasetype(tp1);
302 630 : tp2 = ATOMbasetype(tp2);
303 630 : tp = ATOMbasetype(tp);
304 630 : switch (tp1) {
305 9 : case TYPE_bte:
306 9 : switch (tp2) {
307 9 : case TYPE_bte:
308 9 : switch (tp) {
309 9 : case TYPE_bte:
310 9 : nils = mod_bte_bte_bte(lft, incr1, rgt, incr2,
311 : dst, ci1, ci2, candoff1, candoff2);
312 9 : break;
313 0 : case TYPE_sht:
314 0 : nils = mod_bte_bte_sht(lft, incr1, rgt, incr2,
315 : dst, ci1, ci2, candoff1, candoff2);
316 0 : break;
317 0 : case TYPE_int:
318 0 : nils = mod_bte_bte_int(lft, incr1, rgt, incr2,
319 : dst, ci1, ci2, candoff1, candoff2);
320 0 : break;
321 0 : case TYPE_lng:
322 0 : nils = mod_bte_bte_lng(lft, incr1, rgt, incr2,
323 : dst, ci1, ci2, candoff1, candoff2);
324 0 : break;
325 : #ifdef HAVE_HGE
326 0 : case TYPE_hge:
327 0 : nils = mod_bte_bte_hge(lft, incr1, rgt, incr2,
328 : dst, ci1, ci2, candoff1, candoff2);
329 0 : break;
330 : #endif
331 0 : default:
332 0 : goto unsupported;
333 : }
334 : break;
335 0 : case TYPE_sht:
336 0 : switch (tp) {
337 0 : case TYPE_bte:
338 0 : nils = mod_bte_sht_bte(lft, incr1, rgt, incr2,
339 : dst, ci1, ci2, candoff1, candoff2);
340 0 : break;
341 0 : case TYPE_sht:
342 0 : nils = mod_bte_sht_sht(lft, incr1, rgt, incr2,
343 : dst, ci1, ci2, candoff1, candoff2);
344 0 : break;
345 0 : case TYPE_int:
346 0 : nils = mod_bte_sht_int(lft, incr1, rgt, incr2,
347 : dst, ci1, ci2, candoff1, candoff2);
348 0 : break;
349 0 : case TYPE_lng:
350 0 : nils = mod_bte_sht_lng(lft, incr1, rgt, incr2,
351 : dst, ci1, ci2, candoff1, candoff2);
352 0 : break;
353 : #ifdef HAVE_HGE
354 0 : case TYPE_hge:
355 0 : nils = mod_bte_sht_hge(lft, incr1, rgt, incr2,
356 : dst, ci1, ci2, candoff1, candoff2);
357 0 : break;
358 : #endif
359 0 : default:
360 0 : goto unsupported;
361 : }
362 : break;
363 0 : case TYPE_int:
364 0 : switch (tp) {
365 0 : case TYPE_bte:
366 0 : nils = mod_bte_int_bte(lft, incr1, rgt, incr2,
367 : dst, ci1, ci2, candoff1, candoff2);
368 0 : break;
369 0 : case TYPE_sht:
370 0 : nils = mod_bte_int_sht(lft, incr1, rgt, incr2,
371 : dst, ci1, ci2, candoff1, candoff2);
372 0 : break;
373 0 : case TYPE_int:
374 0 : nils = mod_bte_int_int(lft, incr1, rgt, incr2,
375 : dst, ci1, ci2, candoff1, candoff2);
376 0 : break;
377 0 : case TYPE_lng:
378 0 : nils = mod_bte_int_lng(lft, incr1, rgt, incr2,
379 : dst, ci1, ci2, candoff1, candoff2);
380 0 : break;
381 : #ifdef HAVE_HGE
382 0 : case TYPE_hge:
383 0 : nils = mod_bte_int_hge(lft, incr1, rgt, incr2,
384 : dst, ci1, ci2, candoff1, candoff2);
385 0 : break;
386 : #endif
387 0 : default:
388 0 : goto unsupported;
389 : }
390 : break;
391 0 : case TYPE_lng:
392 0 : switch (tp) {
393 0 : case TYPE_bte:
394 0 : nils = mod_bte_lng_bte(lft, incr1, rgt, incr2,
395 : dst, ci1, ci2, candoff1, candoff2);
396 0 : break;
397 0 : case TYPE_sht:
398 0 : nils = mod_bte_lng_sht(lft, incr1, rgt, incr2,
399 : dst, ci1, ci2, candoff1, candoff2);
400 0 : break;
401 0 : case TYPE_int:
402 0 : nils = mod_bte_lng_int(lft, incr1, rgt, incr2,
403 : dst, ci1, ci2, candoff1, candoff2);
404 0 : break;
405 0 : case TYPE_lng:
406 0 : nils = mod_bte_lng_lng(lft, incr1, rgt, incr2,
407 : dst, ci1, ci2, candoff1, candoff2);
408 0 : break;
409 : #ifdef HAVE_HGE
410 0 : case TYPE_hge:
411 0 : nils = mod_bte_lng_hge(lft, incr1, rgt, incr2,
412 : dst, ci1, ci2, candoff1, candoff2);
413 0 : break;
414 : #endif
415 0 : default:
416 0 : goto unsupported;
417 : }
418 : break;
419 : #ifdef HAVE_HGE
420 0 : case TYPE_hge:
421 0 : switch (tp) {
422 0 : case TYPE_bte:
423 0 : nils = mod_bte_hge_bte(lft, incr1, rgt, incr2,
424 : dst, ci1, ci2, candoff1, candoff2);
425 0 : break;
426 0 : case TYPE_sht:
427 0 : nils = mod_bte_hge_sht(lft, incr1, rgt, incr2,
428 : dst, ci1, ci2, candoff1, candoff2);
429 0 : break;
430 0 : case TYPE_int:
431 0 : nils = mod_bte_hge_int(lft, incr1, rgt, incr2,
432 : dst, ci1, ci2, candoff1, candoff2);
433 0 : break;
434 0 : case TYPE_lng:
435 0 : nils = mod_bte_hge_lng(lft, incr1, rgt, incr2,
436 : dst, ci1, ci2, candoff1, candoff2);
437 0 : break;
438 0 : case TYPE_hge:
439 0 : nils = mod_bte_hge_hge(lft, incr1, rgt, incr2,
440 : dst, ci1, ci2, candoff1, candoff2);
441 0 : break;
442 0 : default:
443 0 : goto unsupported;
444 : }
445 : break;
446 : #endif
447 0 : case TYPE_flt:
448 0 : switch (tp) {
449 0 : case TYPE_flt:
450 0 : nils = mod_bte_flt_flt(lft, incr1, rgt, incr2,
451 : dst, ci1, ci2, candoff1, candoff2);
452 0 : break;
453 0 : default:
454 0 : goto unsupported;
455 : }
456 0 : break;
457 0 : case TYPE_dbl:
458 0 : switch (tp) {
459 0 : case TYPE_dbl:
460 0 : nils = mod_bte_dbl_dbl(lft, incr1, rgt, incr2,
461 : dst, ci1, ci2, candoff1, candoff2);
462 0 : break;
463 0 : default:
464 0 : goto unsupported;
465 : }
466 0 : break;
467 0 : default:
468 0 : goto unsupported;
469 : }
470 : break;
471 8 : case TYPE_sht:
472 8 : switch (tp2) {
473 2 : case TYPE_bte:
474 2 : switch (tp) {
475 0 : case TYPE_bte:
476 0 : nils = mod_sht_bte_bte(lft, incr1, rgt, incr2,
477 : dst, ci1, ci2, candoff1, candoff2);
478 0 : break;
479 2 : case TYPE_sht:
480 2 : nils = mod_sht_bte_sht(lft, incr1, rgt, incr2,
481 : dst, ci1, ci2, candoff1, candoff2);
482 2 : break;
483 0 : case TYPE_int:
484 0 : nils = mod_sht_bte_int(lft, incr1, rgt, incr2,
485 : dst, ci1, ci2, candoff1, candoff2);
486 0 : break;
487 0 : case TYPE_lng:
488 0 : nils = mod_sht_bte_lng(lft, incr1, rgt, incr2,
489 : dst, ci1, ci2, candoff1, candoff2);
490 0 : break;
491 : #ifdef HAVE_HGE
492 0 : case TYPE_hge:
493 0 : nils = mod_sht_bte_hge(lft, incr1, rgt, incr2,
494 : dst, ci1, ci2, candoff1, candoff2);
495 0 : break;
496 : #endif
497 0 : default:
498 0 : goto unsupported;
499 : }
500 : break;
501 6 : case TYPE_sht:
502 6 : switch (tp) {
503 6 : case TYPE_sht:
504 6 : nils = mod_sht_sht_sht(lft, incr1, rgt, incr2,
505 : dst, ci1, ci2, candoff1, candoff2);
506 6 : break;
507 0 : case TYPE_int:
508 0 : nils = mod_sht_sht_int(lft, incr1, rgt, incr2,
509 : dst, ci1, ci2, candoff1, candoff2);
510 0 : break;
511 0 : case TYPE_lng:
512 0 : nils = mod_sht_sht_lng(lft, incr1, rgt, incr2,
513 : dst, ci1, ci2, candoff1, candoff2);
514 0 : break;
515 : #ifdef HAVE_HGE
516 0 : case TYPE_hge:
517 0 : nils = mod_sht_sht_hge(lft, incr1, rgt, incr2,
518 : dst, ci1, ci2, candoff1, candoff2);
519 0 : break;
520 : #endif
521 0 : default:
522 0 : goto unsupported;
523 : }
524 : break;
525 0 : case TYPE_int:
526 0 : switch (tp) {
527 0 : case TYPE_sht:
528 0 : nils = mod_sht_int_sht(lft, incr1, rgt, incr2,
529 : dst, ci1, ci2, candoff1, candoff2);
530 0 : break;
531 0 : case TYPE_int:
532 0 : nils = mod_sht_int_int(lft, incr1, rgt, incr2,
533 : dst, ci1, ci2, candoff1, candoff2);
534 0 : break;
535 0 : case TYPE_lng:
536 0 : nils = mod_sht_int_lng(lft, incr1, rgt, incr2,
537 : dst, ci1, ci2, candoff1, candoff2);
538 0 : break;
539 : #ifdef HAVE_HGE
540 0 : case TYPE_hge:
541 0 : nils = mod_sht_int_hge(lft, incr1, rgt, incr2,
542 : dst, ci1, ci2, candoff1, candoff2);
543 0 : break;
544 : #endif
545 0 : default:
546 0 : goto unsupported;
547 : }
548 : break;
549 0 : case TYPE_lng:
550 0 : switch (tp) {
551 0 : case TYPE_sht:
552 0 : nils = mod_sht_lng_sht(lft, incr1, rgt, incr2,
553 : dst, ci1, ci2, candoff1, candoff2);
554 0 : break;
555 0 : case TYPE_int:
556 0 : nils = mod_sht_lng_int(lft, incr1, rgt, incr2,
557 : dst, ci1, ci2, candoff1, candoff2);
558 0 : break;
559 0 : case TYPE_lng:
560 0 : nils = mod_sht_lng_lng(lft, incr1, rgt, incr2,
561 : dst, ci1, ci2, candoff1, candoff2);
562 0 : break;
563 : #ifdef HAVE_HGE
564 0 : case TYPE_hge:
565 0 : nils = mod_sht_lng_hge(lft, incr1, rgt, incr2,
566 : dst, ci1, ci2, candoff1, candoff2);
567 0 : break;
568 : #endif
569 0 : default:
570 0 : goto unsupported;
571 : }
572 : break;
573 : #ifdef HAVE_HGE
574 0 : case TYPE_hge:
575 0 : switch (tp) {
576 0 : case TYPE_sht:
577 0 : nils = mod_sht_hge_sht(lft, incr1, rgt, incr2,
578 : dst, ci1, ci2, candoff1, candoff2);
579 0 : break;
580 0 : case TYPE_int:
581 0 : nils = mod_sht_hge_int(lft, incr1, rgt, incr2,
582 : dst, ci1, ci2, candoff1, candoff2);
583 0 : break;
584 0 : case TYPE_lng:
585 0 : nils = mod_sht_hge_lng(lft, incr1, rgt, incr2,
586 : dst, ci1, ci2, candoff1, candoff2);
587 0 : break;
588 0 : case TYPE_hge:
589 0 : nils = mod_sht_hge_hge(lft, incr1, rgt, incr2,
590 : dst, ci1, ci2, candoff1, candoff2);
591 0 : break;
592 0 : default:
593 0 : goto unsupported;
594 : }
595 : break;
596 : #endif
597 0 : case TYPE_flt:
598 0 : switch (tp) {
599 0 : case TYPE_flt:
600 0 : nils = mod_sht_flt_flt(lft, incr1, rgt, incr2,
601 : dst, ci1, ci2, candoff1, candoff2);
602 0 : break;
603 0 : default:
604 0 : goto unsupported;
605 : }
606 0 : break;
607 0 : case TYPE_dbl:
608 0 : switch (tp) {
609 0 : case TYPE_dbl:
610 0 : nils = mod_sht_dbl_dbl(lft, incr1, rgt, incr2,
611 : dst, ci1, ci2, candoff1, candoff2);
612 0 : break;
613 0 : default:
614 0 : goto unsupported;
615 : }
616 0 : break;
617 0 : default:
618 0 : goto unsupported;
619 : }
620 : break;
621 338 : case TYPE_int:
622 338 : switch (tp2) {
623 0 : case TYPE_bte:
624 0 : switch (tp) {
625 0 : case TYPE_bte:
626 0 : nils = mod_int_bte_bte(lft, incr1, rgt, incr2,
627 : dst, ci1, ci2, candoff1, candoff2);
628 0 : break;
629 0 : case TYPE_sht:
630 0 : nils = mod_int_bte_sht(lft, incr1, rgt, incr2,
631 : dst, ci1, ci2, candoff1, candoff2);
632 0 : break;
633 0 : case TYPE_int:
634 0 : nils = mod_int_bte_int(lft, incr1, rgt, incr2,
635 : dst, ci1, ci2, candoff1, candoff2);
636 0 : break;
637 0 : case TYPE_lng:
638 0 : nils = mod_int_bte_lng(lft, incr1, rgt, incr2,
639 : dst, ci1, ci2, candoff1, candoff2);
640 0 : break;
641 : #ifdef HAVE_HGE
642 0 : case TYPE_hge:
643 0 : nils = mod_int_bte_hge(lft, incr1, rgt, incr2,
644 : dst, ci1, ci2, candoff1, candoff2);
645 0 : break;
646 : #endif
647 0 : default:
648 0 : goto unsupported;
649 : }
650 : break;
651 0 : case TYPE_sht:
652 0 : switch (tp) {
653 0 : case TYPE_sht:
654 0 : nils = mod_int_sht_sht(lft, incr1, rgt, incr2,
655 : dst, ci1, ci2, candoff1, candoff2);
656 0 : break;
657 0 : case TYPE_int:
658 0 : nils = mod_int_sht_int(lft, incr1, rgt, incr2,
659 : dst, ci1, ci2, candoff1, candoff2);
660 0 : break;
661 0 : case TYPE_lng:
662 0 : nils = mod_int_sht_lng(lft, incr1, rgt, incr2,
663 : dst, ci1, ci2, candoff1, candoff2);
664 0 : break;
665 : #ifdef HAVE_HGE
666 0 : case TYPE_hge:
667 0 : nils = mod_int_sht_hge(lft, incr1, rgt, incr2,
668 : dst, ci1, ci2, candoff1, candoff2);
669 0 : break;
670 : #endif
671 0 : default:
672 0 : goto unsupported;
673 : }
674 : break;
675 338 : case TYPE_int:
676 338 : switch (tp) {
677 338 : case TYPE_int:
678 338 : nils = mod_int_int_int(lft, incr1, rgt, incr2,
679 : dst, ci1, ci2, candoff1, candoff2);
680 338 : break;
681 0 : case TYPE_lng:
682 0 : nils = mod_int_int_lng(lft, incr1, rgt, incr2,
683 : dst, ci1, ci2, candoff1, candoff2);
684 0 : break;
685 : #ifdef HAVE_HGE
686 0 : case TYPE_hge:
687 0 : nils = mod_int_int_hge(lft, incr1, rgt, incr2,
688 : dst, ci1, ci2, candoff1, candoff2);
689 0 : break;
690 : #endif
691 0 : default:
692 0 : goto unsupported;
693 : }
694 : break;
695 0 : case TYPE_lng:
696 0 : switch (tp) {
697 0 : case TYPE_int:
698 0 : nils = mod_int_lng_int(lft, incr1, rgt, incr2,
699 : dst, ci1, ci2, candoff1, candoff2);
700 0 : break;
701 0 : case TYPE_lng:
702 0 : nils = mod_int_lng_lng(lft, incr1, rgt, incr2,
703 : dst, ci1, ci2, candoff1, candoff2);
704 0 : break;
705 : #ifdef HAVE_HGE
706 0 : case TYPE_hge:
707 0 : nils = mod_int_lng_hge(lft, incr1, rgt, incr2,
708 : dst, ci1, ci2, candoff1, candoff2);
709 0 : break;
710 : #endif
711 0 : default:
712 0 : goto unsupported;
713 : }
714 : break;
715 : #ifdef HAVE_HGE
716 0 : case TYPE_hge:
717 0 : switch (tp) {
718 0 : case TYPE_int:
719 0 : nils = mod_int_hge_int(lft, incr1, rgt, incr2,
720 : dst, ci1, ci2, candoff1, candoff2);
721 0 : break;
722 0 : case TYPE_lng:
723 0 : nils = mod_int_hge_lng(lft, incr1, rgt, incr2,
724 : dst, ci1, ci2, candoff1, candoff2);
725 0 : break;
726 0 : case TYPE_hge:
727 0 : nils = mod_int_hge_hge(lft, incr1, rgt, incr2,
728 : dst, ci1, ci2, candoff1, candoff2);
729 0 : break;
730 0 : default:
731 0 : goto unsupported;
732 : }
733 : break;
734 : #endif
735 0 : case TYPE_flt:
736 0 : switch (tp) {
737 0 : case TYPE_flt:
738 0 : nils = mod_int_flt_flt(lft, incr1, rgt, incr2,
739 : dst, ci1, ci2, candoff1, candoff2);
740 0 : break;
741 0 : default:
742 0 : goto unsupported;
743 : }
744 0 : break;
745 0 : case TYPE_dbl:
746 0 : switch (tp) {
747 0 : case TYPE_dbl:
748 0 : nils = mod_int_dbl_dbl(lft, incr1, rgt, incr2,
749 : dst, ci1, ci2, candoff1, candoff2);
750 0 : break;
751 0 : default:
752 0 : goto unsupported;
753 : }
754 0 : break;
755 0 : default:
756 0 : goto unsupported;
757 : }
758 : break;
759 8 : case TYPE_lng:
760 8 : switch (tp2) {
761 0 : case TYPE_bte:
762 0 : switch (tp) {
763 0 : case TYPE_bte:
764 0 : nils = mod_lng_bte_bte(lft, incr1, rgt, incr2,
765 : dst, ci1, ci2, candoff1, candoff2);
766 0 : break;
767 0 : case TYPE_sht:
768 0 : nils = mod_lng_bte_sht(lft, incr1, rgt, incr2,
769 : dst, ci1, ci2, candoff1, candoff2);
770 0 : break;
771 0 : case TYPE_int:
772 0 : nils = mod_lng_bte_int(lft, incr1, rgt, incr2,
773 : dst, ci1, ci2, candoff1, candoff2);
774 0 : break;
775 0 : case TYPE_lng:
776 0 : nils = mod_lng_bte_lng(lft, incr1, rgt, incr2,
777 : dst, ci1, ci2, candoff1, candoff2);
778 0 : break;
779 : #ifdef HAVE_HGE
780 0 : case TYPE_hge:
781 0 : nils = mod_lng_bte_hge(lft, incr1, rgt, incr2,
782 : dst, ci1, ci2, candoff1, candoff2);
783 0 : break;
784 : #endif
785 0 : default:
786 0 : goto unsupported;
787 : }
788 : break;
789 0 : case TYPE_sht:
790 0 : switch (tp) {
791 0 : case TYPE_sht:
792 0 : nils = mod_lng_sht_sht(lft, incr1, rgt, incr2,
793 : dst, ci1, ci2, candoff1, candoff2);
794 0 : break;
795 0 : case TYPE_int:
796 0 : nils = mod_lng_sht_int(lft, incr1, rgt, incr2,
797 : dst, ci1, ci2, candoff1, candoff2);
798 0 : break;
799 0 : case TYPE_lng:
800 0 : nils = mod_lng_sht_lng(lft, incr1, rgt, incr2,
801 : dst, ci1, ci2, candoff1, candoff2);
802 0 : break;
803 : #ifdef HAVE_HGE
804 0 : case TYPE_hge:
805 0 : nils = mod_lng_sht_hge(lft, incr1, rgt, incr2,
806 : dst, ci1, ci2, candoff1, candoff2);
807 0 : break;
808 : #endif
809 0 : default:
810 0 : goto unsupported;
811 : }
812 : break;
813 0 : case TYPE_int:
814 0 : switch (tp) {
815 0 : case TYPE_int:
816 0 : nils = mod_lng_int_int(lft, incr1, rgt, incr2,
817 : dst, ci1, ci2, candoff1, candoff2);
818 0 : break;
819 0 : case TYPE_lng:
820 0 : nils = mod_lng_int_lng(lft, incr1, rgt, incr2,
821 : dst, ci1, ci2, candoff1, candoff2);
822 0 : break;
823 : #ifdef HAVE_HGE
824 0 : case TYPE_hge:
825 0 : nils = mod_lng_int_hge(lft, incr1, rgt, incr2,
826 : dst, ci1, ci2, candoff1, candoff2);
827 0 : break;
828 : #endif
829 0 : default:
830 0 : goto unsupported;
831 : }
832 : break;
833 8 : case TYPE_lng:
834 8 : switch (tp) {
835 8 : case TYPE_lng:
836 8 : nils = mod_lng_lng_lng(lft, incr1, rgt, incr2,
837 : dst, ci1, ci2, candoff1, candoff2);
838 8 : break;
839 : #ifdef HAVE_HGE
840 0 : case TYPE_hge:
841 0 : nils = mod_lng_lng_hge(lft, incr1, rgt, incr2,
842 : dst, ci1, ci2, candoff1, candoff2);
843 0 : break;
844 : #endif
845 0 : default:
846 0 : goto unsupported;
847 : }
848 : break;
849 : #ifdef HAVE_HGE
850 0 : case TYPE_hge:
851 0 : switch (tp) {
852 0 : case TYPE_lng:
853 0 : nils = mod_lng_hge_lng(lft, incr1, rgt, incr2,
854 : dst, ci1, ci2, candoff1, candoff2);
855 0 : break;
856 0 : case TYPE_hge:
857 0 : nils = mod_lng_hge_hge(lft, incr1, rgt, incr2,
858 : dst, ci1, ci2, candoff1, candoff2);
859 0 : break;
860 0 : default:
861 0 : goto unsupported;
862 : }
863 : break;
864 : #endif
865 0 : case TYPE_flt:
866 0 : switch (tp) {
867 0 : case TYPE_flt:
868 0 : nils = mod_lng_flt_flt(lft, incr1, rgt, incr2,
869 : dst, ci1, ci2, candoff1, candoff2);
870 0 : break;
871 0 : default:
872 0 : goto unsupported;
873 : }
874 0 : break;
875 0 : case TYPE_dbl:
876 0 : switch (tp) {
877 0 : case TYPE_dbl:
878 0 : nils = mod_lng_dbl_dbl(lft, incr1, rgt, incr2,
879 : dst, ci1, ci2, candoff1, candoff2);
880 0 : break;
881 0 : default:
882 0 : goto unsupported;
883 : }
884 0 : break;
885 0 : default:
886 0 : goto unsupported;
887 : }
888 : break;
889 : #ifdef HAVE_HGE
890 261 : case TYPE_hge:
891 261 : switch (tp2) {
892 0 : case TYPE_bte:
893 0 : switch (tp) {
894 0 : case TYPE_bte:
895 0 : nils = mod_hge_bte_bte(lft, incr1, rgt, incr2,
896 : dst, ci1, ci2, candoff1, candoff2);
897 0 : break;
898 0 : case TYPE_sht:
899 0 : nils = mod_hge_bte_sht(lft, incr1, rgt, incr2,
900 : dst, ci1, ci2, candoff1, candoff2);
901 0 : break;
902 0 : case TYPE_int:
903 0 : nils = mod_hge_bte_int(lft, incr1, rgt, incr2,
904 : dst, ci1, ci2, candoff1, candoff2);
905 0 : break;
906 0 : case TYPE_lng:
907 0 : nils = mod_hge_bte_lng(lft, incr1, rgt, incr2,
908 : dst, ci1, ci2, candoff1, candoff2);
909 0 : break;
910 0 : case TYPE_hge:
911 0 : nils = mod_hge_bte_hge(lft, incr1, rgt, incr2,
912 : dst, ci1, ci2, candoff1, candoff2);
913 0 : break;
914 0 : default:
915 0 : goto unsupported;
916 : }
917 : break;
918 0 : case TYPE_sht:
919 0 : switch (tp) {
920 0 : case TYPE_sht:
921 0 : nils = mod_hge_sht_sht(lft, incr1, rgt, incr2,
922 : dst, ci1, ci2, candoff1, candoff2);
923 0 : break;
924 0 : case TYPE_int:
925 0 : nils = mod_hge_sht_int(lft, incr1, rgt, incr2,
926 : dst, ci1, ci2, candoff1, candoff2);
927 0 : break;
928 0 : case TYPE_lng:
929 0 : nils = mod_hge_sht_lng(lft, incr1, rgt, incr2,
930 : dst, ci1, ci2, candoff1, candoff2);
931 0 : break;
932 0 : case TYPE_hge:
933 0 : nils = mod_hge_sht_hge(lft, incr1, rgt, incr2,
934 : dst, ci1, ci2, candoff1, candoff2);
935 0 : break;
936 0 : default:
937 0 : goto unsupported;
938 : }
939 : break;
940 0 : case TYPE_int:
941 0 : switch (tp) {
942 0 : case TYPE_int:
943 0 : nils = mod_hge_int_int(lft, incr1, rgt, incr2,
944 : dst, ci1, ci2, candoff1, candoff2);
945 0 : break;
946 0 : case TYPE_lng:
947 0 : nils = mod_hge_int_lng(lft, incr1, rgt, incr2,
948 : dst, ci1, ci2, candoff1, candoff2);
949 0 : break;
950 0 : case TYPE_hge:
951 0 : nils = mod_hge_int_hge(lft, incr1, rgt, incr2,
952 : dst, ci1, ci2, candoff1, candoff2);
953 0 : break;
954 0 : default:
955 0 : goto unsupported;
956 : }
957 : break;
958 0 : case TYPE_lng:
959 0 : switch (tp) {
960 0 : case TYPE_lng:
961 0 : nils = mod_hge_lng_lng(lft, incr1, rgt, incr2,
962 : dst, ci1, ci2, candoff1, candoff2);
963 0 : break;
964 0 : case TYPE_hge:
965 0 : nils = mod_hge_lng_hge(lft, incr1, rgt, incr2,
966 : dst, ci1, ci2, candoff1, candoff2);
967 0 : break;
968 0 : default:
969 0 : goto unsupported;
970 : }
971 : break;
972 261 : case TYPE_hge:
973 261 : switch (tp) {
974 261 : case TYPE_hge:
975 261 : nils = mod_hge_hge_hge(lft, incr1, rgt, incr2,
976 : dst, ci1, ci2, candoff1, candoff2);
977 261 : break;
978 0 : default:
979 0 : goto unsupported;
980 : }
981 261 : break;
982 0 : case TYPE_flt:
983 0 : switch (tp) {
984 0 : case TYPE_flt:
985 0 : nils = mod_hge_flt_flt(lft, incr1, rgt, incr2,
986 : dst, ci1, ci2, candoff1, candoff2);
987 0 : break;
988 0 : default:
989 0 : goto unsupported;
990 : }
991 0 : break;
992 0 : case TYPE_dbl:
993 0 : switch (tp) {
994 0 : case TYPE_dbl:
995 0 : nils = mod_hge_dbl_dbl(lft, incr1, rgt, incr2,
996 : dst, ci1, ci2, candoff1, candoff2);
997 0 : break;
998 0 : default:
999 0 : goto unsupported;
1000 : }
1001 0 : break;
1002 0 : default:
1003 0 : goto unsupported;
1004 : }
1005 : break;
1006 : #endif
1007 1 : case TYPE_flt:
1008 1 : switch (tp2) {
1009 0 : case TYPE_bte:
1010 0 : switch (tp) {
1011 0 : case TYPE_flt:
1012 0 : nils = mod_flt_bte_flt(lft, incr1, rgt, incr2,
1013 : dst, ci1, ci2, candoff1, candoff2);
1014 0 : break;
1015 0 : default:
1016 0 : goto unsupported;
1017 : }
1018 0 : break;
1019 0 : case TYPE_sht:
1020 0 : switch (tp) {
1021 0 : case TYPE_flt:
1022 0 : nils = mod_flt_sht_flt(lft, incr1, rgt, incr2,
1023 : dst, ci1, ci2, candoff1, candoff2);
1024 0 : break;
1025 0 : default:
1026 0 : goto unsupported;
1027 : }
1028 0 : break;
1029 0 : case TYPE_int:
1030 0 : switch (tp) {
1031 0 : case TYPE_flt:
1032 0 : nils = mod_flt_int_flt(lft, incr1, rgt, incr2,
1033 : dst, ci1, ci2, candoff1, candoff2);
1034 0 : break;
1035 0 : default:
1036 0 : goto unsupported;
1037 : }
1038 0 : break;
1039 0 : case TYPE_lng:
1040 0 : switch (tp) {
1041 0 : case TYPE_flt:
1042 0 : nils = mod_flt_lng_flt(lft, incr1, rgt, incr2,
1043 : dst, ci1, ci2, candoff1, candoff2);
1044 0 : break;
1045 0 : default:
1046 0 : goto unsupported;
1047 : }
1048 0 : break;
1049 : #ifdef HAVE_HGE
1050 0 : case TYPE_hge:
1051 0 : switch (tp) {
1052 0 : case TYPE_flt:
1053 0 : nils = mod_flt_hge_flt(lft, incr1, rgt, incr2,
1054 : dst, ci1, ci2, candoff1, candoff2);
1055 0 : break;
1056 0 : default:
1057 0 : goto unsupported;
1058 : }
1059 0 : break;
1060 : #endif
1061 1 : case TYPE_flt:
1062 1 : switch (tp) {
1063 1 : case TYPE_flt:
1064 1 : nils = mod_flt_flt_flt(lft, incr1, rgt, incr2,
1065 : dst, ci1, ci2, candoff1, candoff2);
1066 1 : break;
1067 0 : default:
1068 0 : goto unsupported;
1069 : }
1070 1 : break;
1071 0 : case TYPE_dbl:
1072 0 : switch (tp) {
1073 0 : case TYPE_dbl:
1074 0 : nils = mod_flt_dbl_dbl(lft, incr1, rgt, incr2,
1075 : dst, ci1, ci2, candoff1, candoff2);
1076 0 : break;
1077 0 : default:
1078 0 : goto unsupported;
1079 : }
1080 0 : break;
1081 0 : default:
1082 0 : goto unsupported;
1083 : }
1084 : break;
1085 5 : case TYPE_dbl:
1086 5 : switch (tp2) {
1087 0 : case TYPE_bte:
1088 0 : switch (tp) {
1089 0 : case TYPE_dbl:
1090 0 : nils = mod_dbl_bte_dbl(lft, incr1, rgt, incr2,
1091 : dst, ci1, ci2, candoff1, candoff2);
1092 0 : break;
1093 0 : default:
1094 0 : goto unsupported;
1095 : }
1096 0 : break;
1097 0 : case TYPE_sht:
1098 0 : switch (tp) {
1099 0 : case TYPE_dbl:
1100 0 : nils = mod_dbl_sht_dbl(lft, incr1, rgt, incr2,
1101 : dst, ci1, ci2, candoff1, candoff2);
1102 0 : break;
1103 0 : default:
1104 0 : goto unsupported;
1105 : }
1106 0 : break;
1107 0 : case TYPE_int:
1108 0 : switch (tp) {
1109 0 : case TYPE_dbl:
1110 0 : nils = mod_dbl_int_dbl(lft, incr1, rgt, incr2,
1111 : dst, ci1, ci2, candoff1, candoff2);
1112 0 : break;
1113 0 : default:
1114 0 : goto unsupported;
1115 : }
1116 0 : break;
1117 0 : case TYPE_lng:
1118 0 : switch (tp) {
1119 0 : case TYPE_dbl:
1120 0 : nils = mod_dbl_lng_dbl(lft, incr1, rgt, incr2,
1121 : dst, ci1, ci2, candoff1, candoff2);
1122 0 : break;
1123 0 : default:
1124 0 : goto unsupported;
1125 : }
1126 0 : break;
1127 : #ifdef HAVE_HGE
1128 0 : case TYPE_hge:
1129 0 : switch (tp) {
1130 0 : case TYPE_dbl:
1131 0 : nils = mod_dbl_hge_dbl(lft, incr1, rgt, incr2,
1132 : dst, ci1, ci2, candoff1, candoff2);
1133 0 : break;
1134 0 : default:
1135 0 : goto unsupported;
1136 : }
1137 0 : break;
1138 : #endif
1139 0 : case TYPE_flt:
1140 0 : switch (tp) {
1141 0 : case TYPE_dbl:
1142 0 : nils = mod_dbl_flt_dbl(lft, incr1, rgt, incr2,
1143 : dst, ci1, ci2, candoff1, candoff2);
1144 0 : break;
1145 0 : default:
1146 0 : goto unsupported;
1147 : }
1148 0 : break;
1149 5 : case TYPE_dbl:
1150 5 : switch (tp) {
1151 5 : case TYPE_dbl:
1152 5 : nils = mod_dbl_dbl_dbl(lft, incr1, rgt, incr2,
1153 : dst, ci1, ci2, candoff1, candoff2);
1154 5 : break;
1155 0 : default:
1156 0 : goto unsupported;
1157 : }
1158 5 : break;
1159 0 : default:
1160 0 : goto unsupported;
1161 : }
1162 : break;
1163 0 : default:
1164 0 : goto unsupported;
1165 : }
1166 :
1167 630 : if (nils == BUN_NONE + 1)
1168 1 : GDKerror("22012!division by zero.\n");
1169 :
1170 : return nils;
1171 :
1172 0 : unsupported:
1173 0 : GDKerror("%s: type combination (mod(%s,%s)->%s) not supported.\n",
1174 : func, ATOMname(tp1), ATOMname(tp2), ATOMname(tp));
1175 0 : return BUN_NONE;
1176 : }
1177 :
1178 : BAT *
1179 27 : BATcalcmod(BAT *b1, BAT *b2, BAT *s1, BAT *s2, int tp)
1180 : {
1181 27 : return BATcalcmuldivmod(b1, b2, s1, s2, tp,
1182 : mod_typeswitchloop, __func__);
1183 : }
1184 :
1185 : BAT *
1186 586 : BATcalcmodcst(BAT *b, const ValRecord *v, BAT *s, int tp)
1187 : {
1188 586 : lng t0 = 0;
1189 586 : BAT *bn;
1190 586 : BUN nils;
1191 586 : struct canditer ci;
1192 :
1193 586 : TRC_DEBUG_IF(ALGO) t0 = GDKusec();
1194 :
1195 586 : BATcheck(b, NULL);
1196 :
1197 586 : canditer_init(&ci, b, s);
1198 :
1199 586 : bn = COLnew(ci.hseq, tp, ci.ncand, TRANSIENT);
1200 586 : if (bn == NULL)
1201 : return NULL;
1202 586 : if (ci.ncand == 0)
1203 : return bn;
1204 :
1205 586 : BATiter bi = bat_iterator(b);
1206 1172 : nils = mod_typeswitchloop(bi.base, bi.type, true,
1207 586 : VALptr(v), v->vtype, false,
1208 586 : Tloc(bn, 0), tp,
1209 : &ci,
1210 586 : &(struct canditer){.tpe=cand_dense, .ncand=ci.ncand},
1211 : b->hseqbase, 0, __func__);
1212 586 : bat_iterator_end(&bi);
1213 :
1214 586 : if (nils >= BUN_NONE) {
1215 0 : BBPunfix(bn->batCacheid);
1216 0 : return NULL;
1217 : }
1218 :
1219 586 : BATsetcount(bn, ci.ncand);
1220 :
1221 586 : bn->tsorted = ci.ncand <= 1 || nils == ci.ncand;
1222 586 : bn->trevsorted = ci.ncand <= 1 || nils == ci.ncand;
1223 586 : bn->tkey = ci.ncand <= 1;
1224 586 : bn->tnil = nils != 0;
1225 586 : bn->tnonil = nils == 0;
1226 :
1227 586 : TRC_DEBUG(ALGO, "b=" ALGOBATFMT ",s=" ALGOOPTBATFMT
1228 : " -> " ALGOOPTBATFMT " " LLFMT "usec\n",
1229 : ALGOBATPAR(b), ALGOOPTBATPAR(s),
1230 : ALGOOPTBATPAR(bn), GDKusec() - t0);
1231 :
1232 : return bn;
1233 : }
1234 :
1235 : BAT *
1236 3 : BATcalccstmod(const ValRecord *v, BAT *b, BAT *s, int tp)
1237 : {
1238 3 : lng t0 = 0;
1239 3 : BAT *bn;
1240 3 : BUN nils;
1241 3 : struct canditer ci;
1242 :
1243 3 : TRC_DEBUG_IF(ALGO) t0 = GDKusec();
1244 :
1245 3 : BATcheck(b, NULL);
1246 :
1247 3 : canditer_init(&ci, b, s);
1248 3 : bn = COLnew(ci.hseq, tp, ci.ncand, TRANSIENT);
1249 3 : if (bn == NULL)
1250 : return NULL;
1251 3 : if (ci.ncand == 0)
1252 : return bn;
1253 :
1254 2 : BATiter bi = bat_iterator(b);
1255 4 : nils = mod_typeswitchloop(VALptr(v), v->vtype, false,
1256 2 : bi.base, bi.type, true,
1257 2 : Tloc(bn, 0), tp,
1258 2 : &(struct canditer){.tpe=cand_dense, .ncand=ci.ncand},
1259 : &ci,
1260 : 0, b->hseqbase, __func__);
1261 2 : bat_iterator_end(&bi);
1262 :
1263 2 : if (nils >= BUN_NONE) {
1264 0 : BBPunfix(bn->batCacheid);
1265 0 : return NULL;
1266 : }
1267 :
1268 2 : BATsetcount(bn, ci.ncand);
1269 :
1270 2 : bn->tsorted = ci.ncand <= 1 || nils == ci.ncand;
1271 2 : bn->trevsorted = ci.ncand <= 1 || nils == ci.ncand;
1272 2 : bn->tkey = ci.ncand <= 1;
1273 2 : bn->tnil = nils != 0;
1274 2 : bn->tnonil = nils == 0;
1275 :
1276 2 : TRC_DEBUG(ALGO, "b=" ALGOBATFMT ",s=" ALGOOPTBATFMT
1277 : " -> " ALGOOPTBATFMT " " LLFMT "usec\n",
1278 : ALGOBATPAR(b), ALGOOPTBATPAR(s),
1279 : ALGOOPTBATPAR(bn), GDKusec() - t0);
1280 :
1281 : return bn;
1282 : }
1283 :
1284 : gdk_return
1285 18 : VARcalcmod(ValPtr ret, const ValRecord *lft, const ValRecord *rgt)
1286 : {
1287 18 : ret->bat = false;
1288 18 : if (mod_typeswitchloop(VALptr(lft), lft->vtype, false,
1289 18 : VALptr(rgt), rgt->vtype, false,
1290 18 : VALget(ret), ret->vtype,
1291 18 : &(struct canditer){.tpe=cand_dense, .ncand=1},
1292 18 : &(struct canditer){.tpe=cand_dense, .ncand=1},
1293 : 0, 0, __func__) >= BUN_NONE)
1294 0 : return GDK_FAIL;
1295 18 : return GDK_SUCCEED;
1296 : }
|