Changeset: 6b87f2efb8eb for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/6b87f2efb8eb
Added Files:
        gdk/gdk_analytic_statistics.c
Modified Files:
        gdk/CMakeLists.txt
        gdk/gdk_analytic_func.c
Branch: default
Log Message:

Split gdk_analytic_func.c into two files.


diffs (truncated from 2875 to 300 lines):

diff --git a/gdk/CMakeLists.txt b/gdk/CMakeLists.txt
--- a/gdk/CMakeLists.txt
+++ b/gdk/CMakeLists.txt
@@ -81,6 +81,7 @@ target_sources(bat
   gdk_firstn.c
   gdk_subquery.c gdk_subquery.h
   gdk_analytic_bounds.c
+  gdk_analytic_statistics.c
   gdk_analytic_func.c
   gdk_analytic.h
   gdk_tracer.c gdk_tracer.h
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
@@ -2537,1423 +2537,3 @@ nosupport:
        res = GDK_FAIL;
        goto cleanup;
 }
-
-#ifdef HAVE_HGE
-#define LNG_HGE         hge
-#define GDK_LNG_HGE_max GDK_hge_max
-#define LNG_HGE_nil     hge_nil
-#else
-#define LNG_HGE         lng
-#define GDK_LNG_HGE_max GDK_lng_max
-#define LNG_HGE_nil     lng_nil
-#endif
-
-/* average on integers */
-#define ANALYTICAL_AVERAGE_CALC_NUM_STEP1(TPE, IMP, ARG)               \
-       if (!is_##TPE##_nil(ARG)) {                                     \
-               ADD_WITH_CHECK(ARG, sum, LNG_HGE, sum, GDK_LNG_HGE_max, goto 
avg_overflow##TPE##IMP); \
-               /* count only when no overflow occurs */                \
-               n++;                                                    \
-       }
-
-#define ANALYTICAL_AVERAGE_CALC_NUM_STEP2(TPE, IMP)            \
-                       if (0) {                                \
-avg_overflow##TPE##IMP:                                                \
-                               assert(n > 0);                  \
-                               if (sum >= 0) {                 \
-                                       a = (TPE) (sum / n);    \
-                                       rr = (lng) (sum % n);   \
-                               } else {                        \
-                                       sum = -sum;             \
-                                       a = - (TPE) (sum / n);  \
-                                       rr = (lng) (sum % n);   \
-                                       if (r) {                \
-                                               a--;            \
-                                               rr = n - rr;    \
-                                       }                       \
-                               }
-
-#define ANALYTICAL_AVG_IMP_NUM_UNBOUNDED_TILL_CURRENT_ROW(TPE, IMP)    \
-       do {                                                            \
-               TPE a = 0;                                              \
-               dbl curval = dbl_nil;                                   \
-               for (; k < i;) {                                        \
-                       j = k;                                          \
-                       do {                                            \
-                               ANALYTICAL_AVERAGE_CALC_NUM_STEP1(TPE, IMP, 
bp[k]) \
-                               ANALYTICAL_AVERAGE_CALC_NUM_STEP2(TPE, IMP) \
-                                       while (k < i && !op[k]) {       \
-                                               TPE v = bp[k++];        \
-                                               if (is_##TPE##_nil(v))  \
-                                                       continue;       \
-                                               AVERAGE_ITER(TPE, v, a, rr, n); 
\
-                                       }                               \
-                                       curval = a + (dbl) rr / n;      \
-                                       goto calc_done##TPE##IMP;       \
-                               }                                       \
-                               k++;                                    \
-                       } while (k < i && !op[k]);                      \
-                       curval = n > 0 ? (dbl) sum / n : dbl_nil;       \
-calc_done##TPE##IMP:                                                   \
-                       for (; j < k; j++)                              \
-                               rb[j] = curval;                         \
-                       has_nils |= (n == 0);                           \
-               }                                                       \
-               n = 0;                                                  \
-               sum = 0;                                                \
-       } while (0)
-
-#define ANALYTICAL_AVG_IMP_NUM_CURRENT_ROW_TILL_UNBOUNDED(TPE, IMP)    \
-       do {                                                            \
-               TPE a = 0;                                              \
-               dbl curval = dbl_nil;                                   \
-               l = i - 1;                                              \
-               for (j = l; ; j--) {                                    \
-                       ANALYTICAL_AVERAGE_CALC_NUM_STEP1(TPE, IMP, bp[j]) \
-                       ANALYTICAL_AVERAGE_CALC_NUM_STEP2(TPE, IMP)     \
-                               while (!(op[j] || j == k)) {            \
-                                       TPE v = bp[j--];                \
-                                       if (is_##TPE##_nil(v))          \
-                                               continue;               \
-                                       AVERAGE_ITER(TPE, v, a, rr, n); \
-                               }                                       \
-                               curval = a + (dbl) rr / n;              \
-                               goto calc_done##TPE##IMP;               \
-                       }                                               \
-                       if (op[j] || j == k) {                          \
-                               curval = n > 0 ? (dbl) sum / n : dbl_nil; \
-calc_done##TPE##IMP:                                                   \
-                               for (; ; l--) {                         \
-                                       rb[l] = curval;                 \
-                                       if (l == j)                     \
-                                               break;                  \
-                               }                                       \
-                               has_nils |= (n == 0);                   \
-                               if (j == k)                             \
-                                       break;                          \
-                               l = j - 1;                              \
-                       }                                               \
-               }                                                       \
-               n = 0;                                                  \
-               sum = 0;                                                \
-               k = i;                                                  \
-       } while (0)
-
-#define ANALYTICAL_AVG_IMP_NUM_ALL_ROWS(TPE, IMP)                      \
-       do {                                                            \
-               TPE a = 0;                                              \
-               for (; j < i; j++) {                                    \
-                       TPE v = bp[j];                                  \
-                       ANALYTICAL_AVERAGE_CALC_NUM_STEP1(TPE, IMP, v)  \
-                       ANALYTICAL_AVERAGE_CALC_NUM_STEP2(TPE, IMP)     \
-                               for (; j < i; j++) {                    \
-                                       v = bp[j];                      \
-                                       if (is_##TPE##_nil(v))          \
-                                               continue;               \
-                                       AVERAGE_ITER(TPE, v, a, rr, n); \
-                               }                                       \
-                               curval = a + (dbl) rr / n;              \
-                               goto calc_done##TPE##IMP;               \
-                       }                                               \
-               }                                                       \
-               curval = n > 0 ? (dbl) sum / n : dbl_nil;               \
-calc_done##TPE##IMP:                                                   \
-               for (; k < i; k++)                                      \
-                       rb[k] = curval;                                 \
-               has_nils |= (n == 0);                                   \
-               n = 0;                                                  \
-               sum = 0;                                                \
-       } while (0)
-
-#define ANALYTICAL_AVG_IMP_NUM_CURRENT_ROW(TPE, IMP)   \
-       do {                                            \
-               for (; k < i; k++) {                    \
-                       TPE v = bp[k];                  \
-                       if (is_##TPE##_nil(v)) {        \
-                               rb[k] = dbl_nil;        \
-                               has_nils = true;        \
-                       } else  {                       \
-                               rb[k] = (dbl) v;        \
-                       }                               \
-               }                                       \
-       } while (0)
-
-#define avg_num_deltas(TPE) typedef struct avg_num_deltas##TPE { TPE a; lng n; 
lng rr;} avg_num_deltas##TPE;
-avg_num_deltas(bte)
-avg_num_deltas(sht)
-avg_num_deltas(int)
-avg_num_deltas(lng)
-
-#define INIT_AGGREGATE_AVG_NUM(TPE, NOTHING1, NOTHING2) \
-       do {                                            \
-               computed = (avg_num_deltas##TPE) {0};   \
-       } while (0)
-#define COMPUTE_LEVEL0_AVG_NUM(X, TPE, NOTHING1, NOTHING2)             \
-       do {                                                            \
-               TPE v = bp[j + X];                                      \
-               computed = is_##TPE##_nil(v) ? (avg_num_deltas##TPE){0} : 
(avg_num_deltas##TPE) {.a = v, .n = 1}; \
-       } while (0)
-#define COMPUTE_LEVELN_AVG_NUM(VAL, TPE, NOTHING1, NOTHING2)           \
-       do {                                                            \
-               if (VAL.n)                                              \
-                       AVERAGE_ITER(TPE, VAL.a, computed.a, computed.rr, 
computed.n); \
-       } while (0)
-#define FINALIZE_AGGREGATE_AVG_NUM(TPE, NOTHING1, NOTHING2)            \
-       do {                                                            \
-               if (computed.n == 0) {                                  \
-                       rb[k] = dbl_nil;                                \
-                       has_nils = true;                                \
-               } else {                                                \
-                       rb[k] = computed.a + (dbl) computed.rr / computed.n; \
-               }                                                       \
-       } while (0)
-#define ANALYTICAL_AVG_IMP_NUM_OTHERS(TPE, IMP)                                
\
-       do {                                                            \
-               oid ncount = i - k;                                     \
-               if ((res = GDKrebuild_segment_tree(ncount, 
sizeof(avg_num_deltas##TPE), st, &segment_tree, &levels_offset, &nlevels)) != 
GDK_SUCCEED) \
-                       goto cleanup;                                   \
-               populate_segment_tree(avg_num_deltas##TPE, ncount, 
INIT_AGGREGATE_AVG_NUM, COMPUTE_LEVEL0_AVG_NUM, COMPUTE_LEVELN_AVG_NUM, TPE, 
NOTHING, NOTHING); \
-               for (; k < i; k++)                                      \
-                       compute_on_segment_tree(avg_num_deltas##TPE, start[k] - 
j, end[k] - j, INIT_AGGREGATE_AVG_NUM, COMPUTE_LEVELN_AVG_NUM, 
FINALIZE_AGGREGATE_AVG_NUM, TPE, NOTHING, NOTHING); \
-               j = k;                                                  \
-       } while (0)
-
-/* average on floating-points */
-#define ANALYTICAL_AVG_IMP_FP_UNBOUNDED_TILL_CURRENT_ROW(TPE, IMP)     \
-       do {                                                            \
-               TPE a = 0;                                              \
-               dbl curval = dbl_nil;                                   \
-               for (; k < i;) {                                        \
-                       j = k;                                          \
-                       do {                                            \
-                               if (!is_##TPE##_nil(bp[k]))             \
-                                       AVERAGE_ITER_FLOAT(TPE, bp[k], a, n); \
-                               k++;                                    \
-                       } while (k < i && !op[k]);                      \
-                       if (n > 0)                                      \
-                               curval = a;                             \
-                       else                                            \
-                               has_nils = true;                        \
-                       for (; j < k; j++)                              \
-                               rb[j] = curval;                         \
-               }                                                       \
-               n = 0;                                                  \
-       } while (0)
-
-#define ANALYTICAL_AVG_IMP_FP_CURRENT_ROW_TILL_UNBOUNDED(TPE, IMP)     \
-       do {                                                            \
-               TPE a = 0;                                              \
-               dbl curval = dbl_nil;                                   \
-               l = i - 1;                                              \
-               for (j = l; ; j--) {                                    \
-                       if (!is_##TPE##_nil(bp[j]))                     \
-                               AVERAGE_ITER_FLOAT(TPE, bp[j], a, n);   \
-                       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;                              \
-                       }                                               \
-               }                                                       \
-               n = 0;                                                  \
-               k = i;                                                  \
-       } while (0)
-
-#define ANALYTICAL_AVG_IMP_FP_ALL_ROWS(TPE, IMP)                       \
-       do {                                                            \
-               TPE a = 0;                                              \
-               dbl curval = dbl_nil;                                   \
-               for (; j < i; j++) {                                    \
-                       TPE v = bp[j];                                  \
-                       if (!is_##TPE##_nil(v))                         \
-                               AVERAGE_ITER_FLOAT(TPE, v, a, n);       \
-               }                                                       \
-               if (n > 0)                                              \
-                       curval = a;                                     \
-               else                                                    \
-                       has_nils = true;                                \
-               for (; k < i; k++)                                      \
-                       rb[k] = curval;                                 \
-               n = 0;                                                  \
-       } while (0)
-
-#define ANALYTICAL_AVG_IMP_FP_CURRENT_ROW(TPE, IMP)     
ANALYTICAL_AVG_IMP_NUM_CURRENT_ROW(TPE, IMP)
-
-#define avg_fp_deltas(TPE) typedef struct avg_fp_deltas_##TPE {TPE a; lng n;} 
avg_fp_deltas_##TPE;
-avg_fp_deltas(flt)
-avg_fp_deltas(dbl)
-
-#define INIT_AGGREGATE_AVG_FP(TPE, NOTHING1, NOTHING2) \
-       do {                                            \
-               computed = (avg_fp_deltas_##TPE) {0};   \
-       } while (0)
-#define COMPUTE_LEVEL0_AVG_FP(X, TPE, NOTHING1, NOTHING2)              \
-       do {                                                            \
-               TPE v = bp[j + X];                                      \
-               computed = is_##TPE##_nil(v) ? (avg_fp_deltas_##TPE) {0} : 
(avg_fp_deltas_##TPE) {.n = 1, .a = v}; \
-       } while (0)
-#define COMPUTE_LEVELN_AVG_FP(VAL, TPE, NOTHING1, NOTHING2)            \
-       do {                                                            \
-               if (VAL.n)                                              \
-                       AVERAGE_ITER_FLOAT(TPE, VAL.a, computed.a, computed.n); 
\
-       } while (0)
-#define FINALIZE_AGGREGATE_AVG_FP(TPE, NOTHING1, NOTHING2)     \
-       do {                                                    \
-               if (computed.n == 0) {                          \
-                       rb[k] = dbl_nil;                        \
-                       has_nils = true;                        \
-               } else {                                        \
-                       rb[k] = computed.a;                     \
-               }                                               \
-       } while (0)
-#define ANALYTICAL_AVG_IMP_FP_OTHERS(TPE, IMP)                         \
-       do {                                                            \
-               oid ncount = i - k;                                     \
-               if ((res = GDKrebuild_segment_tree(ncount, 
sizeof(avg_fp_deltas_##TPE), st, &segment_tree, &levels_offset, &nlevels)) != 
GDK_SUCCEED) \
-                       goto cleanup;                                   \
-               populate_segment_tree(avg_fp_deltas_##TPE, ncount, 
INIT_AGGREGATE_AVG_FP, COMPUTE_LEVEL0_AVG_FP, COMPUTE_LEVELN_AVG_FP, TPE, 
NOTHING, NOTHING); \
-               for (; k < i; k++)                                      \
-                       compute_on_segment_tree(avg_fp_deltas_##TPE, start[k] - 
j, end[k] - j, INIT_AGGREGATE_AVG_FP, COMPUTE_LEVELN_AVG_FP, 
FINALIZE_AGGREGATE_AVG_FP, TPE, NOTHING, NOTHING); \
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to