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

Reply via email to