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 -- checkin-list@monetdb.org To unsubscribe send an email to checkin-list-le...@monetdb.org