Changeset: d2a8bdb52603 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=d2a8bdb52603
Modified Files:
        gdk/gdk_analytic_func.c
Branch: window-tunning
Log Message:

Switch frame type at the top of the operator


diffs (truncated from 447 to 300 lines):

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
@@ -910,182 +910,235 @@ GDKanalyticallead(BAT *r, BAT *b, BAT *p
        return GDK_SUCCEED;
 }
 
-#define ANALYTICAL_MIN_MAX_CALC_FIXED(TPE, OP)                         \
-       do {                                                            \
-               TPE *bp = (TPE*)Tloc(b, 0), v, curval = TPE##_nil, *restrict rb 
= (TPE*)Tloc(r, 0); \
-               switch (frame_type) {           \
-               case 3: /* unbounded until current row */       {       \
-                       for (; k < i; k++) { \
-                               v = bp[k];                              \
-                               if (!is_##TPE##_nil(v)) {               \
-                                       if (is_##TPE##_nil(curval))     \
-                                               curval = v;     \
-                                       else                            \
-                                               curval = OP(v, curval); \
-                               }                                       \
-                               rb[k] = curval; \
-                               has_nils |= is_##TPE##_nil(curval); \
-                       } \
-               } break;                \
-               case 4: /* current row until unbounded */       {       \
-                       for (j = i - 1; j >= k; j--) { \
-                               v = bp[j];                              \
-                               if (!is_##TPE##_nil(v)) {               \
-                                       if (is_##TPE##_nil(curval))     \
-                                               curval = v;     \
-                                       else                            \
-                                               curval = OP(v, curval); \
-                               }                                       \
-                               rb[j] = curval; \
-                               has_nils |= is_##TPE##_nil(curval); \
-                       } \
-               } break;                \
-               case 5: /* all rows */  {       \
-                       for (j = k; j < i; j++) { \
-                               v = bp[j];                              \
+#define ANALYTICAL_MIN_MAX_CALC_FIXED_UNBOUNDED_TILL_CURRENT_ROW(TPE, MIN_MAX) 
\
+       do { \
+               TPE curval = TPE##_nil; \
+               for (; k < i; k++) { \
+                       v = bp[k];                              \
+                       if (!is_##TPE##_nil(v)) {               \
+                               if (is_##TPE##_nil(curval))     \
+                                       curval = v;     \
+                               else                            \
+                                       curval = MIN_MAX(v, curval); \
+                       }                                       \
+                       rb[k] = 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; \
+               for (j = i - 1; j >= k; j--) { \
+                       v = bp[j];                              \
+                       if (!is_##TPE##_nil(v)) {               \
+                               if (is_##TPE##_nil(curval))     \
+                                       curval = v;     \
+                               else                            \
+                                       curval = MIN_MAX(v, curval); \
+                       }                                       \
+                       rb[j] = curval; \
+                       has_nils |= is_##TPE##_nil(curval); \
+               } \
+       } while (0)
+
+#define ANALYTICAL_MIN_MAX_CALC_FIXED_ALL_ROWS(TPE, MIN_MAX)   \
+       do { \
+               TPE curval = TPE##_nil; \
+               for (j = k; j < i; j++) { \
+                       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++) { \
+                       v = bp[k]; \
+                       rb[k] = v; \
+                       has_nils |= is_##TPE##_nil(v); \
+               } \
+       } while (0)
+
+#define ANALYTICAL_MIN_MAX_CALC_FIXED_OTHERS(TPE, MIN_MAX)     \
+       do { \
+               TPE curval = TPE##_nil; \
+               for (; k < i; k++) { \
+                       TPE *bs = bp + start[k];                                
\
+                       TPE *be = bp + end[k];                          \
+                       for (; bs < be; bs++) {                         \
+                               v = *bs;                                \
                                if (!is_##TPE##_nil(v)) {               \
                                        if (is_##TPE##_nil(curval))     \
                                                curval = v;     \
                                        else                            \
-                                               curval = OP(v, curval); \
+                                               curval = MIN_MAX(v, curval); \
                                }                                       \
-                       } \
-                       for (; k < i; k++) \
-                               rb[k] = curval; \
-                       has_nils |= is_##TPE##_nil(curval); \
-               } break;                \
-               case 6: /* current row */ {     \
-                       for (; k < i; k++) { \
-                               v = bp[k]; \
-                               rb[k] = v; \
-                               has_nils |= is_##TPE##_nil(v); \
-                       } \
-               } break;                \
-               default: {              \
-                       for (; k < i; k++) { \
-                               TPE *bs = bp + start[k];                        
        \
-                               TPE *be = bp + end[k];                          
\
-                               for (; bs < be; bs++) {                         
\
-                                       v = *bs;                                
\
-                                       if (!is_##TPE##_nil(v)) {               
\
-                                               if (is_##TPE##_nil(curval))     
\
-                                                       curval = v;     \
-                                               else                            
\
-                                                       curval = OP(v, curval); 
\
-                                       }                                       
\
-                               }                                               
\
-                               rb[k] = curval;                                 
\
-                               if (is_##TPE##_nil(curval))                     
\
-                                       has_nils = true;                        
\
-                               else                                            
\
-                                       curval = TPE##_nil;     /* For the next 
iteration */    \
-                       }               \
+                       }                                               \
+                       rb[k] = curval;                                 \
+                       if (is_##TPE##_nil(curval))                     \
+                               has_nils = true;                        \
+                       else                                            \
+                               curval = TPE##_nil;     /* For the next 
iteration */    \
                }               \
-               }       \
+       } while (0)
+
+#define ANALYTICAL_MIN_MAX_CALC_VARSIZED_UNBOUNDED_TILL_CURRENT_ROW(GT_LT)     
\
+       do { \
+               void *curval = (void*) nil; \
+               for (; k < i; k++) { \
+                       void *next = BUNtail(bpi, k);   \
+                       if (atomcmp(next, nil) != 0) {          \
+                               if (atomcmp(curval, nil) == 0)  \
+                                       curval = next;          \
+                               else                            \
+                                       curval = atomcmp(next, curval) GT_LT 0 
? curval : next; \
+                       }                                       \
+                       if (tfastins_nocheckVAR(r, k, curval, Tsize(r)) != 
GDK_SUCCEED) \
+                               return GDK_FAIL; \
+                       has_nils |= atomcmp(curval, nil) == 0;          \
+               } \
        } while (0)
 
-#define ANALYTICAL_MIN_MAX_CALC_VARSIZED(SIGN_OP)                              
\
-       do {                                                            \
-               curval = (void*) nil; \
-               switch (frame_type) {           \
-               case 3: /* unbounded until current row */       {       \
-                       for (; k < i; k++) { \
-                               void *next = BUNtail(bpi, k);   \
-                               if (atomcmp(next, nil) != 0) {          \
-                                       if (atomcmp(curval, nil) == 0)  \
-                                               curval = next;          \
-                                       else                            \
-                                               curval = atomcmp(next, curval) 
SIGN_OP 0 ? curval : next; \
-                               }                                       \
-                               if (tfastins_nocheckVAR(r, k, curval, Tsize(r)) 
!= GDK_SUCCEED) \
-                                       return GDK_FAIL; \
-                               has_nils |= atomcmp(curval, nil) == 0;          
\
-                       } \
-               } break;                \
-               case 4: /* current row until unbounded */       {       \
-                       for (j = i - 1; j >= k; j--) { \
+#define ANALYTICAL_MIN_MAX_CALC_VARSIZED_CURRENT_ROW_TILL_UNBOUNDED(GT_LT)     
\
+       do { \
+               void *curval = (void*) nil; \
+               for (j = i - 1; j >= k; j--) { \
+                       void *next = BUNtail(bpi, j);   \
+                       if (atomcmp(next, nil) != 0) {          \
+                               if (atomcmp(curval, nil) == 0)  \
+                                       curval = next;          \
+                               else                            \
+                                       curval = atomcmp(next, curval) GT_LT 0 
? curval : next; \
+                       }                                       \
+                       if (tfastins_nocheckVAR(r, j, curval, Tsize(r)) != 
GDK_SUCCEED) \
+                               return GDK_FAIL; \
+                       has_nils |= atomcmp(curval, nil) == 0;          \
+               } \
+       } while (0)
+
+#define ANALYTICAL_MIN_MAX_CALC_VARSIZED_ALL_ROWS(GT_LT)       \
+       do { \
+               void *curval = (void*) nil; \
+               for (j = k; j < i; j++) { \
+                       void *next = BUNtail(bpi, 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 (tfastins_nocheckVAR(r, k, curval, Tsize(r)) != 
GDK_SUCCEED) \
+                               return GDK_FAIL; \
+               has_nils |= atomcmp(curval, nil) == 0;          \
+       } while (0)
+
+#define ANALYTICAL_MIN_MAX_CALC_VARSIZED_CURRENT_ROW(GT_LT)    \
+       do { \
+               for (; k < i; k++) { \
+                       void *next = BUNtail(bpi, k); \
+                       if (tfastins_nocheckVAR(r, k, next, Tsize(r)) != 
GDK_SUCCEED) \
+                               return GDK_FAIL; \
+                       has_nils |= atomcmp(next, nil) == 0;            \
+               } \
+       } while (0)
+
+#define ANALYTICAL_MIN_MAX_CALC_VARSIZED_OTHERS(GT_LT) \
+       do { \
+               void *curval = (void*) nil; \
+               for (; k < i; k++) { \
+                       j = start[k];                                   \
+                       l = end[k];                                     \
+                       curval = (void*) nil;                           \
+                       for (;j < l; j++) {                             \
                                void *next = BUNtail(bpi, j);   \
                                if (atomcmp(next, nil) != 0) {          \
                                        if (atomcmp(curval, nil) == 0)  \
                                                curval = next;          \
                                        else                            \
-                                               curval = atomcmp(next, curval) 
SIGN_OP 0 ? curval : next; \
+                                               curval = atomcmp(next, curval) 
GT_LT 0 ? curval : next; \
                                }                                       \
-                               if (tfastins_nocheckVAR(r, j, curval, Tsize(r)) 
!= GDK_SUCCEED) \
-                                       return GDK_FAIL; \
-                               has_nils |= atomcmp(curval, nil) == 0;          
\
-                       } \
-               } break;                \
-               case 5: /* all rows */  {       \
-                       for (j = k; j < i; j++) { \
-                               void *next = BUNtail(bpi, j);   \
-                               if (atomcmp(next, nil) != 0) {          \
-                                       if (atomcmp(curval, nil) == 0)  \
-                                               curval = next;          \
-                                       else                            \
-                                               curval = atomcmp(next, curval) 
SIGN_OP 0 ? curval : next; \
-                               }                                       \
-                       } \
-                       for (; k < i; k++) \
-                               if (tfastins_nocheckVAR(r, k, curval, Tsize(r)) 
!= GDK_SUCCEED) \
-                                       return GDK_FAIL; \
+                       }                                               \
+                       if (tfastins_nocheckVAR(r, k, curval, Tsize(r)) != 
GDK_SUCCEED) \
+                               return GDK_FAIL; \
                        has_nils |= atomcmp(curval, nil) == 0;          \
-               } break;                \
-               case 6: /* current row */ {     \
-                       for (; k < i; k++) { \
-                               void *next = BUNtail(bpi, k); \
-                               if (tfastins_nocheckVAR(r, k, next, Tsize(r)) 
!= GDK_SUCCEED) \
-                                       return GDK_FAIL; \
-                               has_nils |= atomcmp(next, nil) == 0;            
\
-                       } \
-               } break;                \
-               default: {              \
-                       for (; k < i; k++) { \
-                               j = start[k];                                   
\
-                               l = end[k];                                     
\
-                               curval = (void*) nil;                           
\
-                               for (;j < l; j++) {                             
\
-                                       void *next = BUNtail(bpi, j);   \
-                                       if (atomcmp(next, nil) != 0) {          
\
-                                               if (atomcmp(curval, nil) == 0)  
\
-                                                       curval = next;          
\
-                                               else                            
\
-                                                       curval = atomcmp(next, 
curval) SIGN_OP 0 ? curval : next; \
-                                       }                                       
\
-                               }                                               
\
-                               if (tfastins_nocheckVAR(r, k, curval, Tsize(r)) 
!= GDK_SUCCEED) \
-                                       return GDK_FAIL; \
-                               has_nils |= atomcmp(curval, nil) == 0;          
\
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to