Changeset: 13964f4bec84 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=13964f4bec84
Modified Files:
gdk/gdk_analytic_func.c
Branch: statistics-analytics
Log Message:
Cleanup
diffs (truncated from 374 to 300 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
@@ -1793,39 +1793,18 @@ GDK_ANALYTICAL_STDEV_VARIANCE(variance_p
/* There will be always at least one value for the quantile, because we don't
implement the exclude clause yet */
-#define ANALYTICAL_QUANTILE_IMP_SINGLE_FIXED(TPE) \
+#define ANALYTICAL_QUANTILE_IMP_FIXED(TPE1, TPE2, NEXT_QUA)
\
do { \
- TPE *bp = (TPE*)Tloc(b, 0), *restrict rb = (TPE*)Tloc(r, 0), v;
\
- if (is_dbl_nil(qua)) { \
- has_nils = true; \
- for (; i < cnt; i++, rb++) \
- *rb = TPE##_nil; \
- } else { \
- for (; i < cnt; i++, rb++) { \
- ss = (BUN) start[i]; \
- ee = (BUN) end[i]; \
- f = (ee - ss - 1) * qua; \
- qindex = ss + ee - (BUN) (ee + 0.5f - f); \
- assert(qindex >= ss && qindex < ee); \
- v = bp[qindex]; \
- *rb = v; \
- has_nils |= (is_##TPE##_nil(v)); \
- } \
- } \
- } while (0)
-
-#define ANALYTICAL_QUANTILE_IMP_MULTI_FIXED(TPE1, TPE2)
\
- do { \
- TPE2 *restrict qp = (TPE2*)Tloc(q, 0); \
+ TPE1 *restrict bp = (TPE1*)Tloc(b, 0), *restrict rb =
(TPE1*)Tloc(r, 0), v; \
for (; i < cnt; i++, rb++) { \
- TPE2 qua = qp[i]; \
- if (is_##TPE2##_nil(qua)) { \
+ TPE2 nqua = NEXT_QUA; \
+ if (is_##TPE2##_nil(nqua)) { \
*rb = TPE1##_nil; \
has_nils = true; \
} else { \
ss = (BUN) start[i]; \
ee = (BUN) end[i]; \
- f = (ee - ss - 1) * qua; \
+ f = (ee - ss - 1) * nqua; \
qindex = ss + ee - (BUN) (ee + 0.5f - f); \
assert(qindex >= ss && qindex < ee); \
v = bp[qindex]; \
@@ -1835,33 +1814,18 @@ GDK_ANALYTICAL_STDEV_VARIANCE(variance_p
} \
} while (0)
-#define ANALYTICAL_QUANTILE_CALC_FIXED(TPE1) \
+#define ANALYTICAL_QUANTILE_IMP_VARSIZED(TPE2, NEXT_QUA) \
do { \
- TPE1 *restrict bp = (TPE1*)Tloc(b, 0), *restrict rb =
(TPE1*)Tloc(r, 0), v; \
- switch (tp2) { \
- case TYPE_flt: \
- ANALYTICAL_QUANTILE_IMP_MULTI_FIXED(TPE1, flt); \
- break; \
- case TYPE_dbl: \
- ANALYTICAL_QUANTILE_IMP_MULTI_FIXED(TPE1, dbl); \
- break; \
- default: \
- goto nosupport; \
- } \
- } while (0)
-
-#define ANALYTICAL_QUANTILE_IMP_MULTI_VARSIZED(TPE1) \
- do { \
- TPE1 *restrict qp = (TPE1*)Tloc(q, 0); \
+ BATiter bpi = bat_iterator(b); \
for (; i < cnt; i++) { \
- TPE1 qua = qp[i]; \
- if (is_##TPE1##_nil(qua)) { \
+ TPE2 nqua = NEXT_QUA; \
+ if (is_##TPE2##_nil(nqua)) { \
curval = (void *) nil; \
has_nils = true; \
} else { \
ss = (BUN) start[i]; \
ee = (BUN) end[i]; \
- f = (ee - ss - 1) * qua; \
+ f = (ee - ss - 1) * nqua; \
qindex = ss + ee - (BUN) (ee + 0.5f - f); \
assert(qindex >= ss && qindex < ee); \
curval = BUNtail(bpi, qindex); \
@@ -1872,6 +1836,22 @@ GDK_ANALYTICAL_STDEV_VARIANCE(variance_p
} \
} while (0)
+#define ANALYTICAL_QUANTILE_CALC_MULTI(TPE1) \
+ do { \
+ switch (tp2) { \
+ case TYPE_flt: {
\
+ flt *restrict qp = (flt*)Tloc(q, 0); \
+ ANALYTICAL_QUANTILE_IMP_FIXED(TPE1, flt, qp[i]); \
+ } break; \
+ case TYPE_dbl: {
\
+ dbl *restrict qp = (dbl*)Tloc(q, 0); \
+ ANALYTICAL_QUANTILE_IMP_FIXED(TPE1, dbl, qp[i]); \
+ } break; \
+ default: \
+ goto nosupport; \
+ } \
+ } while (0)
+
gdk_return
GDKanalytical_quantile(BAT *r, BAT *b, BAT *s, BAT *e, BAT *q, const void
*restrict quantile, int tp1, int tp2)
{
@@ -1901,90 +1881,72 @@ GDKanalytical_quantile(BAT *r, BAT *b, B
}
switch (tp1) {
case TYPE_bit:
- ANALYTICAL_QUANTILE_IMP_SINGLE_FIXED(bit);
+ ANALYTICAL_QUANTILE_IMP_FIXED(bit, dbl, qua);
break;
case TYPE_bte:
- ANALYTICAL_QUANTILE_IMP_SINGLE_FIXED(bte);
+ ANALYTICAL_QUANTILE_IMP_FIXED(bte, dbl, qua);
break;
case TYPE_sht:
- ANALYTICAL_QUANTILE_IMP_SINGLE_FIXED(sht);
+ ANALYTICAL_QUANTILE_IMP_FIXED(sht, dbl, qua);
break;
case TYPE_int:
- ANALYTICAL_QUANTILE_IMP_SINGLE_FIXED(int);
+ ANALYTICAL_QUANTILE_IMP_FIXED(int, dbl, qua);
break;
case TYPE_lng:
- ANALYTICAL_QUANTILE_IMP_SINGLE_FIXED(lng);
+ ANALYTICAL_QUANTILE_IMP_FIXED(lng, dbl, qua);
break;
#ifdef HAVE_HGE
case TYPE_hge:
- ANALYTICAL_QUANTILE_IMP_SINGLE_FIXED(hge);
+ ANALYTICAL_QUANTILE_IMP_FIXED(hge, dbl, qua);
break;
#endif
case TYPE_flt:
- ANALYTICAL_QUANTILE_IMP_SINGLE_FIXED(flt);
+ ANALYTICAL_QUANTILE_IMP_FIXED(flt, dbl, qua);
break;
case TYPE_dbl:
- ANALYTICAL_QUANTILE_IMP_SINGLE_FIXED(dbl);
+ ANALYTICAL_QUANTILE_IMP_FIXED(dbl, dbl, qua);
break;
- default:{
- BATiter bpi = bat_iterator(b);
- if (is_dbl_nil(qua)) {
- has_nils = true;
- for (; i < cnt; i++)
- if (BUNappend(r, nil, false) !=
GDK_SUCCEED)
- goto allocation_error;
- } else {
- for (; i < cnt; i++) {
- ss = (BUN) start[i];
- ee = (BUN) end[i];
- f = (ee - ss - 1) * qua;
- qindex = ss + ee - (BUN) (ee + 0.5f -
f);
- assert(qindex >= ss && qindex < ee);
- curval = BUNtail(bpi, qindex);
- if (BUNappend(r, curval, false) !=
GDK_SUCCEED)
- goto allocation_error;
- has_nils |= atomcmp(curval, nil) == 0;
- }
- }
- }
+ default:
+ ANALYTICAL_QUANTILE_IMP_VARSIZED(dbl, qua);
}
} else {
switch (tp1) {
case TYPE_bit:
- ANALYTICAL_QUANTILE_CALC_FIXED(bit);
+ ANALYTICAL_QUANTILE_CALC_MULTI(bit);
break;
case TYPE_bte:
- ANALYTICAL_QUANTILE_CALC_FIXED(bte);
+ ANALYTICAL_QUANTILE_CALC_MULTI(bte);
break;
case TYPE_sht:
- ANALYTICAL_QUANTILE_CALC_FIXED(sht);
+ ANALYTICAL_QUANTILE_CALC_MULTI(sht);
break;
case TYPE_int:
- ANALYTICAL_QUANTILE_CALC_FIXED(int);
+ ANALYTICAL_QUANTILE_CALC_MULTI(int);
break;
case TYPE_lng:
- ANALYTICAL_QUANTILE_CALC_FIXED(lng);
+ ANALYTICAL_QUANTILE_CALC_MULTI(lng);
break;
#ifdef HAVE_HGE
case TYPE_hge:
- ANALYTICAL_QUANTILE_CALC_FIXED(hge);
+ ANALYTICAL_QUANTILE_CALC_MULTI(hge);
break;
#endif
case TYPE_flt:
- ANALYTICAL_QUANTILE_CALC_FIXED(flt);
+ ANALYTICAL_QUANTILE_CALC_MULTI(flt);
break;
case TYPE_dbl:
- ANALYTICAL_QUANTILE_CALC_FIXED(dbl);
+ ANALYTICAL_QUANTILE_CALC_MULTI(dbl);
break;
- default:{
- BATiter bpi = bat_iterator(b);
+ default: {
switch (tp2) {
- case TYPE_flt:
- ANALYTICAL_QUANTILE_IMP_MULTI_VARSIZED(flt);
- break;
- case TYPE_dbl:
- ANALYTICAL_QUANTILE_IMP_MULTI_VARSIZED(dbl);
- break;
+ case TYPE_flt: {
+ flt *restrict qp = (flt*)Tloc(q, 0);
+ ANALYTICAL_QUANTILE_IMP_VARSIZED(flt, qp[i]);
+ } break;
+ case TYPE_dbl: {
+ dbl *restrict qp = (dbl*)Tloc(q, 0);
+ ANALYTICAL_QUANTILE_IMP_VARSIZED(dbl, qp[i]);
+ } break;
default:
goto nosupport;
}
@@ -2003,44 +1965,18 @@ nosupport:
return GDK_FAIL;
}
-#define ANALYTICAL_QUANTILE_AVG_IMP_SINGLE_FIXED(TPE) \
+#define ANALYTICAL_QUANTILE_AVG_IMP(TPE1, TPE2, NEXT_QUA) \
do { \
- TPE *bp = (TPE*)Tloc(b, 0), ns, ne; \
- if (is_dbl_nil(qua)) { \
- has_nils = true; \
- for (; i < cnt; i++, rb++) \
- *rb = dbl_nil; \
- } else { \
- for (; i < cnt; i++, rb++) { \
- ss = (BUN) start[i]; \
- ee = (BUN) end[i]; \
- f = (ee - ss - 1) * qua; \
- lo = floor(f); \
- hi = ceil(f); \
- ns = bp[ss + (BUN) hi]; \
- ne = bp[ss + (BUN) lo]; \
- if (is_##TPE##_nil(ns) || is_##TPE##_nil(ne)) {
\
- v = dbl_nil; \
- has_nils = true; \
- } else \
- v = (f - lo) * ns + (lo + 1 - f) * ne; \
- *rb = v; \
- } \
- } \
- } while (0)
-
-#define ANALYTICAL_QUANTILE_AVG_IMP_MULTI_FIXED(TPE1, TPE2) \
- do { \
- TPE2 *restrict qp = (TPE2*)Tloc(q, 0); \
+ TPE1 *restrict bp = (TPE1*)Tloc(b, 0), ns, ne; \
for (; i < cnt; i++, rb++) { \
- TPE2 qua = qp[i]; \
- if (is_##TPE2##_nil(qua)) { \
+ TPE2 nqua = NEXT_QUA; \
+ if (is_##TPE2##_nil(nqua)) { \
*rb = dbl_nil; \
has_nils = true; \
} else { \
ss = (BUN) start[i]; \
ee = (BUN) end[i]; \
- f = (ee - ss - 1) * qua; \
+ f = (ee - ss - 1) * nqua; \
lo = floor(f); \
hi = ceil(f); \
ns = bp[ss + (BUN) hi]; \
@@ -2055,16 +1991,17 @@ nosupport:
} \
} while (0)
-#define ANALYTICAL_QUANTILE_AVG_CALC_FIXED(TPE1) \
+#define ANALYTICAL_QUANTILE_AVG_CALC_MULTI(TPE1) \
do { \
- TPE1 *restrict bp = (TPE1*)Tloc(b, 0), ns, ne; \
switch (tp2) { \
- case TYPE_flt: \
- ANALYTICAL_QUANTILE_AVG_IMP_MULTI_FIXED(TPE1, flt); \
- break; \
- case TYPE_dbl: \
- ANALYTICAL_QUANTILE_AVG_IMP_MULTI_FIXED(TPE1, dbl); \
- break; \
+ case TYPE_flt: {
\
+ flt *restrict qp = (flt*)Tloc(q, 0); \
+ ANALYTICAL_QUANTILE_AVG_IMP(TPE1, flt, qp[i]); \
+ } break; \
+ case TYPE_dbl: {
\
+ dbl *restrict qp = (dbl*)Tloc(q, 0); \
+ ANALYTICAL_QUANTILE_AVG_IMP(TPE1, dbl, qp[i]); \
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list