Changeset: 6301a4a0a2c4 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=6301a4a0a2c4
Modified Files:
gdk/gdk_analytic_func.c
Branch: window-tunning
Log Message:
Fixed current row until unbounded implementation
diffs (truncated from 513 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
@@ -810,21 +810,22 @@ GDKanalyticallead(BAT *r, BAT *b, BAT *p
#define ANALYTICAL_MIN_MAX_CALC_FIXED_CURRENT_ROW_TILL_UNBOUNDED(TPE, MIN_MAX)
\
do { \
TPE curval = TPE##_nil; \
- for (j = i - 1; j >= k; ) { \
- l = j; \
- do { \
- if (!is_##TPE##_nil(bp[j])) { \
- if (is_##TPE##_nil(curval)) \
- curval = bp[j]; \
- else \
- curval = MIN_MAX(bp[j],
curval); \
- } \
- j--; \
- } while (j >= k && !op[j]); \
- m = MAX(k, j); \
- for (; l >= m; l--) \
- rb[l] = curval; \
- has_nils |= is_##TPE##_nil(curval); \
+ l = i - 1; \
+ for (j = l; ; j--) { \
+ if (!is_##TPE##_nil(bp[j])) { \
+ if (is_##TPE##_nil(curval)) \
+ curval = bp[j]; \
+ else \
+ curval = MIN_MAX(bp[j], curval); \
+ } \
+ if (op[j] || j == k) { \
+ for (; l >= j; l--) \
+ rb[l] = curval; \
+ has_nils |= is_##TPE##_nil(curval); \
+ if (j == k) \
+ break; \
+ l = j - 1; \
+ } \
} \
k = i; \
} while (0)
@@ -903,23 +904,24 @@ GDKanalyticallead(BAT *r, BAT *b, BAT *p
#define ANALYTICAL_MIN_MAX_CALC_VARSIZED_CURRENT_ROW_TILL_UNBOUNDED(GT_LT)
\
do { \
const void *curval = nil; \
- for (j = i - 1; j >= k; ) { \
- l = j; \
- do { \
- void *next = BUNtail(bpi, j); \
- if (atomcmp(next, nil) != 0) { \
- if (atomcmp(curval, nil) == 0) \
- curval = next; \
- else \
- curval = atomcmp(next, curval)
GT_LT 0 ? curval : next; \
- } \
- j--; \
- } while (j >= k && !op[j]); \
- m = MAX(k, j); \
- for (; l >= m; l--) \
- if (tfastins_nocheckVAR(r, l, curval, Tsize(r))
!= GDK_SUCCEED) \
- return GDK_FAIL; \
- has_nils |= atomcmp(curval, nil) == 0; \
+ l = i - 1; \
+ for (j = l; ; j--) { \
+ void *next = BUNtail(bpi, j); \
+ if (atomcmp(next, nil) != 0) { \
+ if (atomcmp(curval, nil) == 0) \
+ curval = next; \
+ else \
+ curval = atomcmp(next, curval) GT_LT 0
? curval : next; \
+ } \
+ if (op[j] || j == k) { \
+ for (; l >= j; l--) \
+ if (tfastins_nocheckVAR(r, l, curval,
Tsize(r)) != GDK_SUCCEED) \
+ return GDK_FAIL; \
+ has_nils |= atomcmp(curval, nil) == 0;
\
+ if (j == k) \
+ break; \
+ l = j - 1; \
+ } \
} \
k = i; \
} while (0)
@@ -1036,7 +1038,7 @@ gdk_return
\
GDKanalytical##OP(BAT *r, BAT *p, BAT *o, BAT *b, BAT *s, BAT *e, int tpe, int
frame_type) \
{ \
bool has_nils = false; \
- lng i = 0, j = 0, k = 0, l = 0, m = 0, cnt = (lng) BATcount(b);
\
+ lng i = 0, j = 0, k = 0, l = 0, cnt = (lng) BATcount(b);
\
lng *restrict start = s ? (lng*)Tloc(s, 0) : NULL, *restrict end = e ?
(lng*)Tloc(e, 0) : NULL; \
bit *restrict np = p ? Tloc(p, 0) : NULL, *restrict op = o ? Tloc(o, 0)
: NULL; \
BATiter bpi = bat_iterator(b); \
@@ -1099,27 +1101,28 @@ ANALYTICAL_MIN_MAX(max, MAX, <)
#define ANALYTICAL_COUNT_FIXED_CURRENT_ROW_TILL_UNBOUNDED(TPE) \
do { \
curval = 0; \
+ l = i - 1; \
if (count_all) { \
- for (j = i - 1; j >= k; ) { \
- l = j; \
- do { \
- curval++; \
- j--; \
- } while (j >= k && !op[j]); \
- m = MAX(k, j); \
- for (; l >= m; l--) \
- rb[l] = curval; \
+ for (j = l; ; j--) { \
+ curval++; \
+ if (op[j] || j == k) { \
+ for (; l >= j; l--) \
+ rb[l] = curval; \
+ if (j == k) \
+ break; \
+ l = j - 1; \
+ } \
} \
} else { \
- for (j = i - 1; j >= k; ) { \
- l = j; \
- do { \
- curval += !is_##TPE##_nil(bp[j]); \
- j--; \
- } while (j >= k && !op[j]); \
- m = MAX(k, j); \
- for (; l >= m; l--) \
- rb[l] = curval; \
+ for (j = l; ; j--) { \
+ curval += !is_##TPE##_nil(bp[j]); \
+ if (op[j] || j == k) { \
+ for (; l >= j; l--) \
+ rb[l] = curval; \
+ if (j == k) \
+ break; \
+ l = j - 1; \
+ } \
} \
} \
k = i; \
@@ -1199,27 +1202,28 @@ ANALYTICAL_MIN_MAX(max, MAX, <)
#define ANALYTICAL_COUNT_OTHERS_CURRENT_ROW_TILL_UNBOUNDED \
do { \
curval = 0; \
+ l = i - 1; \
if (count_all) { \
- for (j = i - 1; j >= k; ) { \
- l = j; \
- do { \
- curval++; \
- j--; \
- } while (j >= k && !op[j]); \
- m = MAX(k, j); \
- for (; l >= m; l--) \
- rb[l] = curval; \
+ for (j = l; ; j--) { \
+ curval++; \
+ if (op[j] || j == k) { \
+ for (; l >= j; l--) \
+ rb[l] = curval; \
+ if (j == k) \
+ break; \
+ l = j - 1; \
+ } \
} \
} else { \
- for (j = i - 1; j >= k; ) { \
- l = j; \
- do { \
- curval += cmp(BUNtail(bpi, j), nil) !=
0; \
- j--; \
- } while (j >= k && !op[j]); \
- m = MAX(k, j); \
- for (; l >= m; l--) \
- rb[l] = curval; \
+ for (j = l; ; j--) { \
+ curval += cmp(BUNtail(bpi, j), nil) != 0;
\
+ if (op[j] || j == k) { \
+ for (; l >= j; l--) \
+ rb[l] = curval; \
+ if (j == k) \
+ break; \
+ l = j - 1; \
+ } \
} \
} \
k = i; \
@@ -1328,7 +1332,7 @@ ANALYTICAL_MIN_MAX(max, MAX, <)
gdk_return
GDKanalyticalcount(BAT *r, BAT *p, BAT *o, BAT *b, BAT *s, BAT *e, bit
ignore_nils, int tpe, int frame_type)
{
- lng i = 0, j = 0, k = 0, l = 0, m = 0, curval = 0, cnt = (lng)
BATcount(b);
+ lng i = 0, j = 0, k = 0, l = 0, curval = 0, cnt = (lng) BATcount(b);
lng *restrict start = s ? (lng*)Tloc(s, 0) : NULL, *restrict end = e ?
(lng*)Tloc(e, 0) : NULL, *restrict rb = (lng *) Tloc(r, 0);
bit *restrict np = p ? Tloc(p, 0) : NULL, *restrict op = o ? Tloc(o, 0)
: NULL;
const void *restrict nil = ATOMnilptr(tpe);
@@ -1384,21 +1388,22 @@ GDKanalyticalcount(BAT *r, BAT *p, BAT *
#define ANALYTICAL_SUM_IMP_NUM_CURRENT_ROW_TILL_UNBOUNDED(TPE1, TPE2) \
do { \
TPE2 curval = TPE2##_nil; \
- for (j = i - 1; j >= k; ) { \
- l = j; \
- do { \
- if (!is_##TPE1##_nil(bp[j])) { \
- if (is_##TPE2##_nil(curval)) \
- curval = (TPE2) bp[j]; \
- else \
- ADD_WITH_CHECK(bp[j], curval,
TPE2, curval, GDK_##TPE2##_max, goto calc_overflow); \
- } \
- j--; \
- } while (j >= k && !op[j]); \
- m = MAX(k, j); \
- for (; l >= m; l--) \
- rb[l] = curval; \
- has_nils |= is_##TPE2##_nil(curval); \
+ l = i - 1; \
+ for (j = l; ; j--) { \
+ if (!is_##TPE1##_nil(bp[j])) { \
+ if (is_##TPE2##_nil(curval)) \
+ curval = (TPE2) bp[j]; \
+ else \
+ ADD_WITH_CHECK(bp[j], curval, TPE2,
curval, GDK_##TPE2##_max, goto calc_overflow); \
+ } \
+ if (op[j] || j == k) { \
+ for (; l >= j; l--) \
+ rb[l] = curval; \
+ has_nils |= is_##TPE2##_nil(curval); \
+ if (j == k) \
+ break; \
+ l = j - 1; \
+ } \
} \
k = i; \
} while (0)
@@ -1479,22 +1484,23 @@ GDKanalyticalcount(BAT *r, BAT *p, BAT *
#define ANALYTICAL_SUM_IMP_FP_CURRENT_ROW_TILL_UNBOUNDED(TPE1, TPE2) /* TODO
go through a version of dofsum which returns the current partials */ \
do { \
- TPE2 curval = TPE2##_nil; \
- for (j = i - 1; j >= k; ) { \
- l = j; \
- do { \
- if (!is_##TPE1##_nil(bp[j])) { \
- if (is_##TPE2##_nil(curval)) \
- curval = (TPE2) bp[j]; \
- else \
- ADD_WITH_CHECK(bp[j], curval,
TPE2, curval, GDK_##TPE2##_max, goto calc_overflow); \
- } \
- j--; \
- } while (j >= k && !op[j]); \
- m = MAX(k, j); \
- for (; l >= m; l--) \
- rb[l] = curval; \
- has_nils |= is_##TPE2##_nil(curval); \
+ TPE2 curval = TPE2##_nil; \
+ l = i - 1; \
+ for (j = l; ; j--) { \
+ if (!is_##TPE1##_nil(bp[j])) { \
+ if (is_##TPE2##_nil(curval)) \
+ curval = (TPE2) bp[j]; \
+ else \
+ ADD_WITH_CHECK(bp[j], curval, TPE2,
curval, GDK_##TPE2##_max, goto calc_overflow); \
+ } \
+ if (op[j] || j == k) { \
+ for (; l >= j; l--) \
+ rb[l] = curval; \
+ has_nils |= is_##TPE2##_nil(curval); \
+ if (j == k) \
+ break; \
+ l = j - 1; \
+ } \
} \
k = i; \
} while (0)
@@ -1688,7 +1694,7 @@ gdk_return
GDKanalyticalsum(BAT *r, BAT *p, BAT *o, BAT *b, BAT *s, BAT *e, int tp1, int
tp2, int frame_type)
{
bool has_nils = false;
- lng i = 0, j = 0, k = 0, l = 0, m = 0, cnt = (lng) BATcount(b);
+ lng i = 0, j = 0, k = 0, l = 0, cnt = (lng) BATcount(b);
lng *restrict start = s ? (lng*)Tloc(s, 0) : NULL, *restrict end = e ?
(lng*)Tloc(e, 0) : NULL;
bit *restrict np = p ? Tloc(p, 0) : NULL, *restrict op = o ? Tloc(o, 0)
: NULL;
int abort_on_error = 1;
@@ -1755,16 +1761,17 @@ GDKanalyticalsum(BAT *r, BAT *p, BAT *o,
#define ANALYTICAL_PROD_CALC_NUM_CURRENT_ROW_TILL_UNBOUNDED(TPE1, TPE2, TPE3) \
do { \
TPE2 curval = TPE2##_nil; \
- for (j = i - 1; j >= k; ) { \
- l = j; \
- do { \
- PROD_NUM(TPE1, TPE2, TPE3, bp[j]); \
- j--; \
- } while (j >= k && !op[j]); \
- m = MAX(k, j); \
- for (; l >= m; l--) \
- rb[l] = curval; \
- has_nils |= is_##TPE2##_nil(curval); \
+ l = i - 1; \
+ for (j = l; ; j--) { \
+ PROD_NUM(TPE1, TPE2, TPE3, bp[j]); \
+ if (op[j] || j == k) { \
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list