Changeset: d2a8bdb52603 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=d2a8bdb52603 Modified Files: gdk/gdk_analytic_func.c Branch: window-tunning Log Message:
Switch frame type at the top of the operator
diffs (truncated from 447 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
@@ -910,182 +910,235 @@ GDKanalyticallead(BAT *r, BAT *b, BAT *p
return GDK_SUCCEED;
}
-#define ANALYTICAL_MIN_MAX_CALC_FIXED(TPE, OP) \
- do { \
- TPE *bp = (TPE*)Tloc(b, 0), v, curval = TPE##_nil, *restrict rb
= (TPE*)Tloc(r, 0); \
- switch (frame_type) { \
- case 3: /* unbounded until current row */ { \
- for (; k < i; k++) { \
- v = bp[k]; \
- if (!is_##TPE##_nil(v)) { \
- if (is_##TPE##_nil(curval)) \
- curval = v; \
- else \
- curval = OP(v, curval); \
- } \
- rb[k] = curval; \
- has_nils |= is_##TPE##_nil(curval); \
- } \
- } break; \
- case 4: /* current row until unbounded */ { \
- for (j = i - 1; j >= k; j--) { \
- v = bp[j]; \
- if (!is_##TPE##_nil(v)) { \
- if (is_##TPE##_nil(curval)) \
- curval = v; \
- else \
- curval = OP(v, curval); \
- } \
- rb[j] = curval; \
- has_nils |= is_##TPE##_nil(curval); \
- } \
- } break; \
- case 5: /* all rows */ { \
- for (j = k; j < i; j++) { \
- v = bp[j]; \
+#define ANALYTICAL_MIN_MAX_CALC_FIXED_UNBOUNDED_TILL_CURRENT_ROW(TPE, MIN_MAX)
\
+ do { \
+ TPE curval = TPE##_nil; \
+ for (; k < i; k++) { \
+ v = bp[k]; \
+ if (!is_##TPE##_nil(v)) { \
+ if (is_##TPE##_nil(curval)) \
+ curval = v; \
+ else \
+ curval = MIN_MAX(v, curval); \
+ } \
+ rb[k] = curval; \
+ has_nils |= is_##TPE##_nil(curval); \
+ } \
+ } while (0)
+
+#define ANALYTICAL_MIN_MAX_CALC_FIXED_CURRENT_ROW_TILL_UNBOUNDED(TPE, MIN_MAX)
\
+ do { \
+ TPE curval = TPE##_nil; \
+ for (j = i - 1; j >= k; j--) { \
+ v = bp[j]; \
+ if (!is_##TPE##_nil(v)) { \
+ if (is_##TPE##_nil(curval)) \
+ curval = v; \
+ else \
+ curval = MIN_MAX(v, curval); \
+ } \
+ rb[j] = curval; \
+ has_nils |= is_##TPE##_nil(curval); \
+ } \
+ } while (0)
+
+#define ANALYTICAL_MIN_MAX_CALC_FIXED_ALL_ROWS(TPE, MIN_MAX) \
+ do { \
+ TPE curval = TPE##_nil; \
+ for (j = k; j < i; j++) { \
+ v = bp[j]; \
+ if (!is_##TPE##_nil(v)) { \
+ if (is_##TPE##_nil(curval)) \
+ curval = v; \
+ else \
+ curval = MIN_MAX(v, curval); \
+ } \
+ } \
+ for (; k < i; k++) \
+ rb[k] = curval; \
+ has_nils |= is_##TPE##_nil(curval); \
+ } while (0)
+
+#define ANALYTICAL_MIN_MAX_CALC_FIXED_CURRENT_ROW(TPE, MIN_MAX) \
+ do { \
+ for (; k < i; k++) { \
+ v = bp[k]; \
+ rb[k] = v; \
+ has_nils |= is_##TPE##_nil(v); \
+ } \
+ } while (0)
+
+#define ANALYTICAL_MIN_MAX_CALC_FIXED_OTHERS(TPE, MIN_MAX) \
+ do { \
+ TPE curval = TPE##_nil; \
+ for (; k < i; k++) { \
+ TPE *bs = bp + start[k];
\
+ TPE *be = bp + end[k]; \
+ for (; bs < be; bs++) { \
+ v = *bs; \
if (!is_##TPE##_nil(v)) { \
if (is_##TPE##_nil(curval)) \
curval = v; \
else \
- curval = OP(v, curval); \
+ curval = MIN_MAX(v, curval); \
} \
- } \
- for (; k < i; k++) \
- rb[k] = curval; \
- has_nils |= is_##TPE##_nil(curval); \
- } break; \
- case 6: /* current row */ { \
- for (; k < i; k++) { \
- v = bp[k]; \
- rb[k] = v; \
- has_nils |= is_##TPE##_nil(v); \
- } \
- } break; \
- default: { \
- for (; k < i; k++) { \
- TPE *bs = bp + start[k];
\
- TPE *be = bp + end[k];
\
- for (; bs < be; bs++) {
\
- v = *bs;
\
- if (!is_##TPE##_nil(v)) {
\
- if (is_##TPE##_nil(curval))
\
- curval = v; \
- else
\
- curval = OP(v, curval);
\
- }
\
- }
\
- rb[k] = curval;
\
- if (is_##TPE##_nil(curval))
\
- has_nils = true;
\
- else
\
- curval = TPE##_nil; /* For the next
iteration */ \
- } \
+ } \
+ rb[k] = curval; \
+ if (is_##TPE##_nil(curval)) \
+ has_nils = true; \
+ else \
+ curval = TPE##_nil; /* For the next
iteration */ \
} \
- } \
+ } while (0)
+
+#define ANALYTICAL_MIN_MAX_CALC_VARSIZED_UNBOUNDED_TILL_CURRENT_ROW(GT_LT)
\
+ do { \
+ void *curval = (void*) nil; \
+ for (; k < i; k++) { \
+ void *next = BUNtail(bpi, k); \
+ if (atomcmp(next, nil) != 0) { \
+ if (atomcmp(curval, nil) == 0) \
+ curval = next; \
+ else \
+ curval = atomcmp(next, curval) GT_LT 0
? curval : next; \
+ } \
+ if (tfastins_nocheckVAR(r, k, curval, Tsize(r)) !=
GDK_SUCCEED) \
+ return GDK_FAIL; \
+ has_nils |= atomcmp(curval, nil) == 0; \
+ } \
} while (0)
-#define ANALYTICAL_MIN_MAX_CALC_VARSIZED(SIGN_OP)
\
- do { \
- curval = (void*) nil; \
- switch (frame_type) { \
- case 3: /* unbounded until current row */ { \
- for (; k < i; k++) { \
- void *next = BUNtail(bpi, k); \
- if (atomcmp(next, nil) != 0) { \
- if (atomcmp(curval, nil) == 0) \
- curval = next; \
- else \
- curval = atomcmp(next, curval)
SIGN_OP 0 ? curval : next; \
- } \
- if (tfastins_nocheckVAR(r, k, curval, Tsize(r))
!= GDK_SUCCEED) \
- return GDK_FAIL; \
- has_nils |= atomcmp(curval, nil) == 0;
\
- } \
- } break; \
- case 4: /* current row until unbounded */ { \
- for (j = i - 1; j >= k; j--) { \
+#define ANALYTICAL_MIN_MAX_CALC_VARSIZED_CURRENT_ROW_TILL_UNBOUNDED(GT_LT)
\
+ do { \
+ void *curval = (void*) nil; \
+ for (j = i - 1; j >= k; 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 (tfastins_nocheckVAR(r, j, curval, Tsize(r)) !=
GDK_SUCCEED) \
+ return GDK_FAIL; \
+ has_nils |= atomcmp(curval, nil) == 0; \
+ } \
+ } while (0)
+
+#define ANALYTICAL_MIN_MAX_CALC_VARSIZED_ALL_ROWS(GT_LT) \
+ do { \
+ void *curval = (void*) nil; \
+ for (j = k; j < i; 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; \
+ } \
+ } \
+ for (; k < i; k++) \
+ if (tfastins_nocheckVAR(r, k, curval, Tsize(r)) !=
GDK_SUCCEED) \
+ return GDK_FAIL; \
+ has_nils |= atomcmp(curval, nil) == 0; \
+ } while (0)
+
+#define ANALYTICAL_MIN_MAX_CALC_VARSIZED_CURRENT_ROW(GT_LT) \
+ do { \
+ for (; k < i; k++) { \
+ void *next = BUNtail(bpi, k); \
+ if (tfastins_nocheckVAR(r, k, next, Tsize(r)) !=
GDK_SUCCEED) \
+ return GDK_FAIL; \
+ has_nils |= atomcmp(next, nil) == 0; \
+ } \
+ } while (0)
+
+#define ANALYTICAL_MIN_MAX_CALC_VARSIZED_OTHERS(GT_LT) \
+ do { \
+ void *curval = (void*) nil; \
+ for (; k < i; k++) { \
+ j = start[k]; \
+ l = end[k]; \
+ curval = (void*) nil; \
+ 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)
SIGN_OP 0 ? curval : next; \
+ curval = atomcmp(next, curval)
GT_LT 0 ? curval : next; \
} \
- if (tfastins_nocheckVAR(r, j, curval, Tsize(r))
!= GDK_SUCCEED) \
- return GDK_FAIL; \
- has_nils |= atomcmp(curval, nil) == 0;
\
- } \
- } break; \
- case 5: /* all rows */ { \
- for (j = k; j < i; j++) { \
- void *next = BUNtail(bpi, j); \
- if (atomcmp(next, nil) != 0) { \
- if (atomcmp(curval, nil) == 0) \
- curval = next; \
- else \
- curval = atomcmp(next, curval)
SIGN_OP 0 ? curval : next; \
- } \
- } \
- for (; k < i; k++) \
- if (tfastins_nocheckVAR(r, k, curval, Tsize(r))
!= GDK_SUCCEED) \
- return GDK_FAIL; \
+ } \
+ if (tfastins_nocheckVAR(r, k, curval, Tsize(r)) !=
GDK_SUCCEED) \
+ return GDK_FAIL; \
has_nils |= atomcmp(curval, nil) == 0; \
- } break; \
- case 6: /* current row */ { \
- for (; k < i; k++) { \
- void *next = BUNtail(bpi, k); \
- if (tfastins_nocheckVAR(r, k, next, Tsize(r))
!= GDK_SUCCEED) \
- return GDK_FAIL; \
- has_nils |= atomcmp(next, nil) == 0;
\
- } \
- } break; \
- default: { \
- for (; k < i; k++) { \
- j = start[k];
\
- l = end[k];
\
- curval = (void*) nil;
\
- 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) SIGN_OP 0 ? curval : next; \
- }
\
- }
\
- if (tfastins_nocheckVAR(r, k, curval, Tsize(r))
!= GDK_SUCCEED) \
- return GDK_FAIL; \
- has_nils |= atomcmp(curval, nil) == 0;
\
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list
