Changeset: 7eb91308bbc9 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/7eb91308bbc9 Added Files: gdk/gdk_analytic_minmax.h Modified Files: gdk/CMakeLists.txt gdk/gdk_analytic_func.c Branch: windowfun_cleanup Log Message:
c template hack for GDKanalytical{min,max} working
diffs (truncated from 908 to 300 lines):
diff --git a/gdk/CMakeLists.txt b/gdk/CMakeLists.txt
--- a/gdk/CMakeLists.txt
+++ b/gdk/CMakeLists.txt
@@ -85,7 +85,7 @@ target_sources(bat
gdk_subquery.c gdk_subquery.h
gdk_analytic_bounds.c
gdk_analytic_statistics.c
- gdk_analytic_func.c
+ gdk_analytic_func.c gdk_analytic_func.h
gdk_analytic.h
gdk_tracer.c gdk_tracer.h
gdk_rtree.c
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
@@ -893,430 +893,20 @@ GDKanalyticallead(BAT *r, BAT *b, BAT *p
return GDK_SUCCEED;
}
-#define ANALYTICAL_MIN_MAX_CALC_FIXED_UNBOUNDED_TILL_CURRENT_ROW(TPE, MIN_MAX)
\
- do { \
- TPE curval = TPE##_nil; \
- for (; k < i;) { \
- j = k; \
- do { \
- if (!is_##TPE##_nil(bp[k])) { \
- if (is_##TPE##_nil(curval)) \
- curval = bp[k]; \
- else \
- curval = MIN_MAX(bp[k],
curval); \
- } \
- k++; \
- } while (k < i && !op[k]); \
- for (; j < k; j++) \
- rb[j] = 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; \
- 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--) { \
- rb[l] = curval; \
- if (l == j) \
- break; \
- } \
- has_nils |= is_##TPE##_nil(curval); \
- if (j == k) \
- break; \
- l = j - 1; \
- } \
- } \
- k = i; \
- } while (0)
-
-#define ANALYTICAL_MIN_MAX_CALC_FIXED_ALL_ROWS(TPE, MIN_MAX) \
- do { \
- TPE curval = TPE##_nil; \
- for (j = k; j < i; j++) { \
- TPE 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++) { \
- TPE v = bp[k]; \
- rb[k] = v; \
- has_nils |= is_##TPE##_nil(v); \
- } \
- } while (0)
-
-#define INIT_AGGREGATE_MIN_MAX_FIXED(TPE, MIN_MAX, NOTHING) \
- do { \
- computed = TPE##_nil; \
- } while (0)
-#define COMPUTE_LEVEL0_MIN_MAX_FIXED(X, TPE, MIN_MAX, NOTHING) \
- do { \
- computed = bp[j + X]; \
- } while (0)
-#define COMPUTE_LEVELN_MIN_MAX_FIXED(VAL, TPE, MIN_MAX, NOTHING) \
- do { \
- if (!is_##TPE##_nil(VAL)) { \
- if (is_##TPE##_nil(computed)) \
- computed = VAL; \
- else \
- computed = MIN_MAX(computed, VAL); \
- } \
- } while (0)
-#define FINALIZE_AGGREGATE_MIN_MAX_FIXED(TPE, MIN_MAX, NOTHING) \
- do { \
- rb[k] = computed; \
- has_nils |= is_##TPE##_nil(computed); \
- } while (0)
-#define ANALYTICAL_MIN_MAX_CALC_FIXED_OTHERS(TPE, MIN_MAX) \
- do { \
- oid ncount = i - k; \
- if ((res = GDKrebuild_segment_tree(ncount, sizeof(TPE), st,
&segment_tree, &levels_offset, &nlevels)) != GDK_SUCCEED) \
- goto cleanup; \
- populate_segment_tree(TPE, ncount,
INIT_AGGREGATE_MIN_MAX_FIXED, COMPUTE_LEVEL0_MIN_MAX_FIXED,
COMPUTE_LEVELN_MIN_MAX_FIXED, TPE, MIN_MAX, NOTHING); \
- for (; k < i; k++) \
- compute_on_segment_tree(TPE, start[k] - j, end[k] - j,
INIT_AGGREGATE_MIN_MAX_FIXED, COMPUTE_LEVELN_MIN_MAX_FIXED,
FINALIZE_AGGREGATE_MIN_MAX_FIXED, TPE, MIN_MAX, NOTHING); \
- j = k; \
- } while (0)
-
-#define ANALYTICAL_MIN_MAX_CALC_OTHERS_UNBOUNDED_TILL_CURRENT_ROW(GT_LT) \
- do { \
- const void *curval = nil; \
- if (ATOMvarsized(tpe)) { \
- for (; k < i;) { \
- j = k; \
- do { \
- const void *next = BUNtvar(bi, k); \
- if (atomcmp(next, nil) != 0) { \
- if (atomcmp(curval, nil) == 0) \
- curval = next; \
- else \
- curval = atomcmp(next,
curval) GT_LT 0 ? curval : next; \
- } \
- k++; \
- } while (k < i && !op[k]); \
- for (; j < k; j++) \
- if ((res = tfastins_nocheckVAR(r, j,
curval)) != GDK_SUCCEED) \
- goto cleanup; \
- has_nils |= atomcmp(curval, nil) == 0; \
- } \
- } else { \
- for (; k < i;) { \
- j = k; \
- do { \
- const void *next = BUNtloc(bi, k); \
- if (atomcmp(next, nil) != 0) { \
- if (atomcmp(curval, nil) == 0) \
- curval = next; \
- else \
- curval = atomcmp(next,
curval) GT_LT 0 ? curval : next; \
- } \
- k++; \
- } while (k < i && !op[k]); \
- for (; j < k; j++) { \
- memcpy(rcast, curval, width); \
- rcast += width; \
- } \
- has_nils |= atomcmp(curval, nil) == 0; \
- } \
- } \
- } while (0)
-
-#define ANALYTICAL_MIN_MAX_CALC_OTHERS_CURRENT_ROW_TILL_UNBOUNDED(GT_LT) \
- do { \
- const void *curval = nil; \
- l = i - 1; \
- if (ATOMvarsized(tpe)) { \
- for (j = l; ; j--) { \
- const void *next = BUNtvar(bi, 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--) { \
- if ((res =
tfastins_nocheckVAR(r, l, curval)) != GDK_SUCCEED) \
- goto cleanup; \
- if (l == j) \
- break; \
- } \
- has_nils |= atomcmp(curval, nil) == 0; \
- if (j == k) \
- break; \
- l = j - 1; \
- } \
- } \
- } else { \
- for (j = l; ; j--) { \
- const void *next = BUNtloc(bi, 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) { \
- BUN x = l * width; \
- for (; ; l--) { \
- memcpy(rcast + x, curval,
width); \
- x -= width; \
- if (l == j) \
- break; \
- } \
- has_nils |= atomcmp(curval, nil) == 0; \
- if (j == k) \
- break; \
- l = j - 1; \
- } \
- } \
- } \
- k = i; \
- } while (0)
-
-#define ANALYTICAL_MIN_MAX_CALC_OTHERS_ALL_ROWS(GT_LT) \
- do { \
- const void *curval = (void*) nil; \
- if (ATOMvarsized(tpe)) { \
- for (j = k; j < i; j++) { \
- const void *next = BUNtvar(bi, 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 ((res = tfastins_nocheckVAR(r, k, curval))
!= GDK_SUCCEED) \
- goto cleanup; \
- } else { \
- for (j = k; j < i; j++) { \
- const void *next = BUNtloc(bi, 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++) { \
- memcpy(rcast, curval, width); \
- rcast += width; \
- } \
- } \
- has_nils |= atomcmp(curval, nil) == 0; \
- } while (0)
-
-#define ANALYTICAL_MIN_MAX_CALC_OTHERS_CURRENT_ROW(GT_LT) \
- do { \
- if (ATOMvarsized(tpe)) { \
- for (; k < i; k++) { \
- const void *next = BUNtvar(bi, k); \
- if ((res = tfastins_nocheckVAR(r, k, next)) !=
GDK_SUCCEED) \
- goto cleanup; \
- has_nils |= atomcmp(next, nil) == 0; \
- } \
- } else { \
- for (; k < i; k++) { \
- const void *next = BUNtloc(bi, k); \
- memcpy(rcast, next, width); \
- rcast += width; \
- has_nils |= atomcmp(next, nil) == 0; \
- } \
- } \
- } while (0)
-
-#define INIT_AGGREGATE_MIN_MAX_OTHERS(GT_LT, NOTHING1, NOTHING2) \
- do { \
- computed = (void*) nil; \
- } while (0)
-#define COMPUTE_LEVEL0_MIN_MAX_OTHERS(X, GT_LT, NOTHING1, NOTHING2) \
- do { \
- computed = BUNtail(bi, j + X); \
- } while (0)
-#define COMPUTE_LEVELN_MIN_MAX_OTHERS(VAL, GT_LT, NOTHING1, NOTHING2) \
- do { \
- if (atomcmp(VAL, nil) != 0) { \
- if (atomcmp(computed, nil) == 0) \
- computed = VAL; \
- else \
- computed = atomcmp(VAL, computed) GT_LT 0 ?
computed : VAL; \
- } \
- } while (0)
-#define FINALIZE_AGGREGATE_MIN_MAX_OTHERS(GT_LT, NOTHING1, NOTHING2) \
- do { \
- if (ATOMvarsized(tpe)) { \
- if ((res = tfastins_nocheckVAR(r, k, computed)) !=
GDK_SUCCEED) \
- goto cleanup; \
- } else { \
- memcpy(rcast, computed, width); \
- rcast += width; \
- } \
- has_nils |= atomcmp(computed, nil) == 0; \
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]
