Changeset: 5f1c3b499b75 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/5f1c3b499b75
Modified Files:
        gdk/gdk_analytic_statistics.c
Branch: default
Log Message:

A bit of code rearrangement.
I don't like macros that contain unbalanced braces.


diffs (truncated from 340 to 300 lines):

diff --git a/gdk/gdk_analytic_statistics.c b/gdk/gdk_analytic_statistics.c
--- a/gdk/gdk_analytic_statistics.c
+++ b/gdk/gdk_analytic_statistics.c
@@ -25,28 +25,34 @@
 
 /* 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++;                                                    \
-       }
+       do {                                                            \
+               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++;                                            \
+               }                                                       \
+       } while (0)
 
-#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;    \
-                                       }                       \
-                               }
+/* do the common part of the overflow handling from STEP1 */
+#define ANALYTICAL_AVERAGE_CALC_NUM_STEP2(TPE, IMP)    \
+       do {                                            \
+         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;            \
+                       }                               \
+               }                                       \
+       } while (0)
 
 #define ANALYTICAL_AVG_IMP_NUM_UNBOUNDED_TILL_CURRENT_ROW(TPE, IMP)    \
        do {                                                            \
@@ -55,21 +61,20 @@ avg_overflow##TPE##IMP:                                     
        \
                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;       \
-                               }                                       \
+                               ANALYTICAL_AVERAGE_CALC_NUM_STEP1(TPE, IMP, 
bp[k]); \
                                k++;                                    \
                        } while (k < i && !op[k]);                      \
                        curval = n > 0 ? (dbl) sum / n : dbl_nil;       \
-calc_done##TPE##IMP:                                                   \
+                       if (0) { /* overflow handling from STEP1 */     \
+                               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;              \
+                       }                                               \
                        for (; j < k; j++)                              \
                                rb[j] = curval;                         \
                        has_nils |= (n == 0);                           \
@@ -84,20 +89,19 @@ calc_done##TPE##IMP:                                        
                \
                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;               \
-                       }                                               \
+                       ANALYTICAL_AVERAGE_CALC_NUM_STEP1(TPE, IMP, bp[j]); \
                        if (op[j] || j == k) {                          \
                                curval = n > 0 ? (dbl) sum / n : dbl_nil; \
-calc_done##TPE##IMP:                                                   \
+                               if (0) { /* overflow handling from STEP1 */ \
+                                       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; \
+                                       }                               \
+                               }                                       \
                                for (; ; l--) {                         \
                                        rb[l] = curval;                 \
                                        if (l == j)                     \
@@ -117,22 +121,22 @@ calc_done##TPE##IMP:                                      
                \
 #define ANALYTICAL_AVG_IMP_NUM_ALL_ROWS(TPE, IMP)                      \
        do {                                                            \
                TPE a = 0;                                              \
+               TPE v;                                                  \
                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;               \
-                       }                                               \
+                       v = bp[j];                                      \
+                       ANALYTICAL_AVERAGE_CALC_NUM_STEP1(TPE, IMP, v); \
                }                                                       \
                curval = n > 0 ? (dbl) sum / n : dbl_nil;               \
-calc_done##TPE##IMP:                                                   \
+               if (0) { /* overflow handling from STEP1 */             \
+                       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;                      \
+               }                                                       \
                for (; k < i; k++)                                      \
                        rb[k] = curval;                                 \
                has_nils |= (n == 0);                                   \
@@ -379,25 +383,25 @@ GDKanalyticalavg(BAT *r, BAT *p, BAT *o,
 
        if (cnt > 0) {
                switch (frame_type) {
-               case 3: /* unbounded until current row */       {
+               case 3: /* unbounded until current row */
                        ANALYTICAL_AVG_BRANCHES(UNBOUNDED_TILL_CURRENT_ROW);
-               } break;
-               case 4: /* current row until unbounded */       {
+                       break;
+               case 4: /* current row until unbounded */
                        ANALYTICAL_AVG_BRANCHES(CURRENT_ROW_TILL_UNBOUNDED);
-               } break;
-               case 5: /* all rows */  {
+                       break;
+               case 5: /* all rows */
                        ANALYTICAL_AVG_BRANCHES(ALL_ROWS);
-               } break;
-               case 6: /* current row */ {
+                       break;
+               case 6: /* current row */
                        ANALYTICAL_AVG_BRANCHES(CURRENT_ROW);
-               } break;
-               default: {
+                       break;
+               default:
                        if (!(st = GDKinitialize_segment_tree())) {
                                res = GDK_FAIL;
                                goto cleanup;
                        }
                        ANALYTICAL_AVG_BRANCHES(OTHERS);
-               }
+                       break;
                }
        }
 
@@ -639,25 +643,25 @@ GDKanalyticalavginteger(BAT *r, BAT *p, 
 
        if (cnt > 0) {
                switch (frame_type) {
-               case 3: /* unbounded until current row */       {
+               case 3: /* unbounded until current row */
                        ANALYTICAL_AVG_INT_BRANCHES(UNBOUNDED_TILL_CURRENT_ROW);
-               } break;
-               case 4: /* current row until unbounded */       {
+                       break;
+               case 4: /* current row until unbounded */
                        ANALYTICAL_AVG_INT_BRANCHES(CURRENT_ROW_TILL_UNBOUNDED);
-               } break;
-               case 5: /* all rows */  {
+                       break;
+               case 5: /* all rows */
                        ANALYTICAL_AVG_INT_BRANCHES(ALL_ROWS);
-               } break;
-               case 6: /* current row */ {
+                       break;
+               case 6: /* current row */
                        ANALYTICAL_AVG_INT_BRANCHES(CURRENT_ROW);
-               } break;
-               default: {
+                       break;
+               default:
                        if (!(st = GDKinitialize_segment_tree())) {
                                res = GDK_FAIL;
                                goto cleanup;
                        }
                        ANALYTICAL_AVG_INT_BRANCHES(OTHERS);
-               }
+                       break;
                }
        }
 
@@ -907,25 +911,25 @@ GDKanalytical_##NAME(BAT *r, BAT *p, BAT
                                                                        \
        if (cnt > 0) {                                                  \
                switch (frame_type) {                                   \
-               case 3: /* unbounded until current row */       {       \
+               case 3: /* unbounded until current row */               \
                        
ANALYTICAL_STATISTICS_BRANCHES(STDEV_VARIANCE_UNBOUNDED_TILL_CURRENT_ROW, 
SAMPLE, OP); \
-               } break;                                                \
-               case 4: /* current row until unbounded */       {       \
+                       break;                                          \
+               case 4: /* current row until unbounded */               \
                        
ANALYTICAL_STATISTICS_BRANCHES(STDEV_VARIANCE_CURRENT_ROW_TILL_UNBOUNDED, 
SAMPLE, OP); \
-               } break;                                                \
-               case 5: /* all rows */  {                               \
+                       break;                                          \
+               case 5: /* all rows */                                  \
                        ANALYTICAL_STATISTICS_BRANCHES(STDEV_VARIANCE_ALL_ROWS, 
SAMPLE, OP); \
-               } break;                                                \
-               case 6: /* current row */ {                             \
+                       break;                                          \
+               case 6: /* current row */                               \
                        
ANALYTICAL_STATISTICS_BRANCHES(STDEV_VARIANCE_CURRENT_ROW, SAMPLE, OP); \
-               } break;                                                \
-               default: {                                              \
+                       break;                                          \
+               default:                                                \
                        if (!(st = GDKinitialize_segment_tree())) {     \
                                res = GDK_FAIL;                         \
                                goto cleanup;                           \
                        }                                               \
                        ANALYTICAL_STATISTICS_BRANCHES(STDEV_VARIANCE_OTHERS, 
SAMPLE, OP); \
-               }                                                       \
+                       break;                                          \
                }                                                       \
        }                                                               \
                                                                        \
@@ -1130,25 +1134,25 @@ GDKanalytical_##NAME(BAT *r, BAT *p, BAT
                                                                        \
        if (cnt > 0) {                                                  \
                switch (frame_type) {                                   \
-               case 3: /* unbounded until current row */       {       \
+               case 3: /* unbounded until current row */               \
                        
ANALYTICAL_STATISTICS_BRANCHES(COVARIANCE_UNBOUNDED_TILL_CURRENT_ROW, SAMPLE, 
OP); \
-               } break;                                                \
-               case 4: /* current row until unbounded */       {       \
+                       break;                                          \
+               case 4: /* current row until unbounded */               \
                        
ANALYTICAL_STATISTICS_BRANCHES(COVARIANCE_CURRENT_ROW_TILL_UNBOUNDED, SAMPLE, 
OP); \
-               } break;                                                \
-               case 5: /* all rows */  {                               \
+                       break;                                          \
+               case 5: /* all rows */                                  \
                        ANALYTICAL_STATISTICS_BRANCHES(COVARIANCE_ALL_ROWS, 
SAMPLE, OP); \
-               } break;                                                \
-               case 6: /* current row */ {                             \
+                       break;                                          \
+               case 6: /* current row */                               \
                        ANALYTICAL_STATISTICS_BRANCHES(COVARIANCE_CURRENT_ROW, 
SAMPLE, OP); \
-               } break;                                                \
-               default: {                                              \
+                       break;                                          \
+               default:                                                \
                        if (!(st = GDKinitialize_segment_tree())) {     \
                                res = GDK_FAIL;                         \
                                goto cleanup;                           \
                        }                                               \
                        ANALYTICAL_STATISTICS_BRANCHES(COVARIANCE_OTHERS, 
SAMPLE, OP); \
-               }                                                       \
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to