Changeset: ed0399e67a7f for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=ed0399e67a7f
Modified Files:
gdk/gdk_analytic_func.c
Branch: Nov2019
Log Message:
Added missing hge integer case for GDKanalyticalnthvalue, also when there are
no null values for flt and dbl cases in GDKanalyticaldiff, use the regular case
diffs (141 lines):
diff --git a/gdk/gdk_analytic_func.c b/gdk/gdk_analytic_func.c
--- a/gdk/gdk_analytic_func.c
+++ b/gdk/gdk_analytic_func.c
@@ -87,12 +87,20 @@ GDKanalyticaldiff(BAT *r, BAT *b, BAT *p
ANALYTICAL_DIFF_IMP(hge);
break;
#endif
- case TYPE_flt:
- ANALYTICAL_DIFF_FLOAT_IMP(flt);
- break;
- case TYPE_dbl:
- ANALYTICAL_DIFF_FLOAT_IMP(dbl);
- break;
+ case TYPE_flt: {
+ if (b->tnonil) {
+ ANALYTICAL_DIFF_IMP(flt);
+ } else { /* Because of NaN values, use this path */
+ ANALYTICAL_DIFF_FLOAT_IMP(flt);
+ }
+ } break;
+ case TYPE_dbl: {
+ if (b->tnonil) {
+ ANALYTICAL_DIFF_IMP(dbl);
+ } else { /* Because of NaN values, use this path */
+ ANALYTICAL_DIFF_FLOAT_IMP(dbl);
+ }
+ } break;
default:{
BATiter it = bat_iterator(b);
ptr v = BUNtail(it, 0), next;
@@ -397,14 +405,14 @@ GDKanalyticallast(BAT *r, BAT *b, BAT *s
} \
} while (0)
-#define ANALYTICAL_NTHVALUE_IMP_MULTI_FIXED(TPE1, TPE2)
\
+#define ANALYTICAL_NTHVALUE_IMP_MULTI_FIXED(TPE1, TPE2, TPE3)
\
do { \
TPE2 *restrict lp = (TPE2*)Tloc(l, 0); \
for (; i < cnt; i++, rb++) { \
TPE2 lnth = lp[i]; \
bs = bp + start[i]; \
be = bp + end[i]; \
- if (is_##TPE2##_nil(lnth) || be <= bs || (lng)(lnth -
1) > (end[i] - start[i])) \
+ if (is_##TPE2##_nil(lnth) || be <= bs || (TPE3)(lnth -
1) > (TPE3)(end[i] - start[i])) \
curval = TPE1##_nil; \
else \
curval = *(bs + lnth - 1); \
@@ -414,6 +422,15 @@ GDKanalyticallast(BAT *r, BAT *b, BAT *s
} \
} while (0)
+#ifdef HAVE_HGE
+#define ANALYTICAL_NTHVALUE_CALC_FIXED_HGE(TPE1) \
+ case TYPE_hge: \
+ ANALYTICAL_NTHVALUE_IMP_MULTI_FIXED(TPE1, hge, hge); \
+ break;
+#else
+#define ANALYTICAL_NTHVALUE_CALC_FIXED_HGE(TPE1)
+#endif
+
#define ANALYTICAL_NTHVALUE_CALC_FIXED(TPE1) \
do { \
TPE1 *bp, *bs, *be, curval, *restrict rb; \
@@ -421,28 +438,29 @@ GDKanalyticallast(BAT *r, BAT *b, BAT *s
rb = (TPE1*)Tloc(r, 0); \
switch (tp2) { \
case TYPE_bte: \
- ANALYTICAL_NTHVALUE_IMP_MULTI_FIXED(TPE1, bte); \
+ ANALYTICAL_NTHVALUE_IMP_MULTI_FIXED(TPE1, bte, lng); \
break; \
case TYPE_sht: \
- ANALYTICAL_NTHVALUE_IMP_MULTI_FIXED(TPE1, sht); \
+ ANALYTICAL_NTHVALUE_IMP_MULTI_FIXED(TPE1, sht, lng); \
break; \
case TYPE_int: \
- ANALYTICAL_NTHVALUE_IMP_MULTI_FIXED(TPE1, int); \
+ ANALYTICAL_NTHVALUE_IMP_MULTI_FIXED(TPE1, int, lng); \
break; \
case TYPE_lng: \
- ANALYTICAL_NTHVALUE_IMP_MULTI_FIXED(TPE1, lng); \
+ ANALYTICAL_NTHVALUE_IMP_MULTI_FIXED(TPE1, lng, lng); \
break; \
+ ANALYTICAL_NTHVALUE_CALC_FIXED_HGE(TPE1) \
default: \
goto nosupport; \
} \
} while (0)
-#define ANALYTICAL_NTHVALUE_IMP_MULTI_VARSIZED(TPE2) \
+#define ANALYTICAL_NTHVALUE_IMP_MULTI_VARSIZED(TPE1, TPE2)
\
do { \
- TPE2 *restrict lp = (TPE2*)Tloc(l, 0); \
+ TPE1 *restrict lp = (TPE1*)Tloc(l, 0); \
for (; i < cnt; i++) { \
- TPE2 lnth = lp[i]; \
- if (is_##TPE2##_nil(lnth) || end[i] <= start[i] ||
(lng)(lnth - 1) > (end[i] - start[i])) \
+ TPE1 lnth = lp[i]; \
+ if (is_##TPE1##_nil(lnth) || end[i] <= start[i] ||
(TPE2)(lnth - 1) > (TPE2)(end[i] - start[i])) \
curval = (void *) nil; \
else \
curval = BUNtail(bpi, (BUN) (start[i] + lnth -
1)); \
@@ -484,6 +502,12 @@ GDKanalyticalnthvalue(BAT *r, BAT *b, BA
case TYPE_lng:{
nth = *(lng *) bound;
} break;
+#ifdef HAVE_HGE
+ case TYPE_hge:{
+ hge nval = *(hge *) bound;
+ nth = is_hge_nil(nval) ? lng_nil : (nval > (hge)
GDK_lng_max) ? GDK_lng_max : (lng) nval;
+ } break;
+#endif
default:
goto nosupport;
}
@@ -565,17 +589,22 @@ GDKanalyticalnthvalue(BAT *r, BAT *b, BA
BATiter bpi = bat_iterator(b);
switch (tp2) {
case TYPE_bte:
- ANALYTICAL_NTHVALUE_IMP_MULTI_VARSIZED(bte);
+ ANALYTICAL_NTHVALUE_IMP_MULTI_VARSIZED(bte,
lng);
break;
case TYPE_sht:
- ANALYTICAL_NTHVALUE_IMP_MULTI_VARSIZED(sht);
+ ANALYTICAL_NTHVALUE_IMP_MULTI_VARSIZED(sht,
lng);
break;
case TYPE_int:
- ANALYTICAL_NTHVALUE_IMP_MULTI_VARSIZED(int);
+ ANALYTICAL_NTHVALUE_IMP_MULTI_VARSIZED(int,
lng);
break;
case TYPE_lng:
- ANALYTICAL_NTHVALUE_IMP_MULTI_VARSIZED(lng);
+ ANALYTICAL_NTHVALUE_IMP_MULTI_VARSIZED(lng,
lng);
break;
+#ifdef HAVE_HGE
+ case TYPE_hge:
+ ANALYTICAL_NTHVALUE_IMP_MULTI_VARSIZED(hge,
hge);
+ break;
+#endif
default:
goto nosupport;
}
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list