Changeset: a8d099df268d for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=a8d099df268d
Modified Files:
        gdk/gdk_analytic.c
        gdk/gdk_analytic.h
Branch: analytics
Log Message:

Code cleanup.


diffs (truncated from 951 to 300 lines):

diff --git a/gdk/gdk_analytic.c b/gdk/gdk_analytic.c
--- a/gdk/gdk_analytic.c
+++ b/gdk/gdk_analytic.c
@@ -157,7 +157,7 @@ GDKanalyticaldiff(BAT *r, BAT *b, BAT *c
                        rp += ncnt;                      \
                        NTILE_CALC(TPE)                  \
                } else {                             \
-                       rp = rb + cnt;                   \
+                       rp += cnt;                       \
                        NTILE_CALC(TPE)                  \
                }                                    \
                goto finish;                         \
@@ -192,9 +192,8 @@ GDKanalyticalntile(BAT *r, BAT *b, BAT *
                        ANALYTICAL_NTILE_IMP(hge)
                        break;
 #endif
-               default: {
+               default:
                        goto nosupport;
-               }
        }
 nosupport:
        GDKerror("ntile: type %s not supported.\n", ATOMname(tpe));
@@ -209,42 +208,52 @@ finish:
 #undef ANALYTICAL_NTILE_IMP
 #undef NTILE_CALC
 
-#define ANALYTICAL_FIRST_IMP(TPE)                 \
-       do {                                          \
-               TPE *rp, *rb, *restrict bp, curval;       \
-               rb = rp = (TPE*)Tloc(r, 0);               \
-               bp = (TPE*)Tloc(b, 0);                    \
-               curval = *bp;                             \
-               if (p) {                                  \
-                       pnp = np = (bit*)Tloc(p, 0);          \
-                       end = np + cnt;                       \
-                       for(; np<end; np++) {                 \
-                               if (*np) {                        \
-                                       ncnt = (np - pnp);            \
-                                       rp += ncnt;                   \
-                                       bp += ncnt;                   \
-                                       if(is_##TPE##_nil(curval))    \
-                                               has_nils = true;          \
-                                       for (;rb < rp; rb++)          \
-                                               *rb = curval;             \
-                                       curval = *bp;                 \
-                                       pnp = np;                     \
-                               }                                 \
-                       }                                     \
-                       ncnt = (np - pnp);                    \
-                       rp += ncnt;                           \
-                       bp += ncnt;                           \
-                       if(is_##TPE##_nil(curval))            \
-                               has_nils = true;                  \
-                       for (;rb < rp; rb++)                  \
-                               *rb = curval;                     \
-               } else {                                  \
-                       TPE *rend = rp + cnt;                 \
-                       if(is_##TPE##_nil(curval))            \
-                               has_nils = true;                  \
-                       for(; rp<rend; rp++)                  \
-                               *rp = curval;                     \
-               }                                         \
+#define FIRST_CALC(TPE)            \
+       do {                           \
+               for (;rb < rp; rb++)       \
+                       *rb = curval;          \
+               if(is_##TPE##_nil(curval)) \
+                       has_nils = true;       \
+       } while(0);
+
+#define ANALYTICAL_FIRST_IMP(TPE)           \
+       do {                                    \
+               TPE *rp, *rb, *restrict bp, curval; \
+               rb = rp = (TPE*)Tloc(r, 0);         \
+               bp = (TPE*)Tloc(b, 0);              \
+               curval = *bp;                       \
+               if (p) {                            \
+                       pnp = np = (bit*)Tloc(p, 0);    \
+                       end = np + cnt;                 \
+                       for(; np<end; np++) {           \
+                               if (*np) {                  \
+                                       ncnt = (np - pnp);      \
+                                       rp += ncnt;             \
+                                       bp += ncnt;             \
+                                       FIRST_CALC(TPE)         \
+                                       curval = *bp;           \
+                                       pnp = np;               \
+                               }                           \
+                       }                               \
+                       ncnt = (np - pnp);              \
+                       rp += ncnt;                     \
+                       bp += ncnt;                     \
+                       FIRST_CALC(TPE)                 \
+               } else {                            \
+                       rp += cnt;                      \
+                       FIRST_CALC(TPE)                 \
+               }                                   \
+       } while(0);
+
+#define ANALYTICAL_FIRST_OTHERS                                         \
+       do {                                                                \
+               curval = BUNtail(bpi, j);                                       
\
+               if((*atomcmp)(curval, nil) == 0)                                
\
+                       has_nils = true;                                        
    \
+               for (;j < i; j++) {                                             
\
+                       if ((gdk_res = BUNappend(r, curval, false)) != 
GDK_SUCCEED) \
+                               goto finish;                                    
        \
+               }                                                               
\
        } while(0);
 
 gdk_return
@@ -253,7 +262,7 @@ GDKanalyticalfirst(BAT *r, BAT *b, BAT *
        int (*atomcmp)(const void *, const void *);
        const void* restrict nil;
        bool has_nils = false;
-       BUN i, j, ncnt, cnt = BATcount(b);
+       BUN i = 0, j = 0, ncnt, cnt = BATcount(b);
        bit *np, *pnp, *end;
        gdk_return gdk_res = GDK_SUCCEED;
 
@@ -287,35 +296,24 @@ GDKanalyticalfirst(BAT *r, BAT *b, BAT *
                        break;
                default: {
                        BATiter bpi = bat_iterator(b);
-                       void *restrict curval = BUNtail(bpi, 0);
+                       void *restrict curval;
                        nil = ATOMnilptr(tpe);
                        atomcmp = ATOMcompare(tpe);
                        if (p) {
-                               np = (bit*)Tloc(p, 0);
-                               for(i=0,j=0; i<cnt; i++, np++) {
+                               pnp = np = (bit*)Tloc(p, 0);
+                               end = np + cnt;
+                               for(; np<end; np++) {
                                        if (*np) {
-                                               if((*atomcmp)(curval, nil) == 0)
-                                                       has_nils = true;
-                                               for (;j < i; j++) {
-                                                       if ((gdk_res = 
BUNappend(r, curval, false)) != GDK_SUCCEED)
-                                                               goto finish;
-                                               }
-                                               curval = BUNtail(bpi, i);
+                                               i += (np - pnp);
+                                               ANALYTICAL_FIRST_OTHERS
+                                               pnp = np;
                                        }
                                }
-                               if((*atomcmp)(curval, nil) == 0)
-                                       has_nils = true;
-                               for (;j < i; j++) {
-                                       if ((gdk_res = BUNappend(r, curval, 
false)) != GDK_SUCCEED)
-                                          goto finish;
-                               }
+                               i += (np - pnp);
+                               ANALYTICAL_FIRST_OTHERS
                        } else { /* single value, ie no ordering */
-                               if((*atomcmp)(curval, nil) == 0)
-                                       has_nils = true;
-                               for(i=0; i<cnt; i++) {
-                                       if ((gdk_res = BUNappend(r, curval, 
false)) != GDK_SUCCEED)
-                                               goto finish;
-                               }
+                               i += cnt;
+                               ANALYTICAL_FIRST_OTHERS
                        }
                }
        }
@@ -327,44 +325,55 @@ finish:
 }
 
 #undef ANALYTICAL_FIRST_IMP
+#undef FIRST_CALC
+#undef ANALYTICAL_FIRST_OTHERS
 
-#define ANALYTICAL_LAST_IMP(TPE)                  \
-       do {                                          \
-               TPE *rp, *rb, *restrict bp, curval;       \
-               rb = rp = (TPE*)Tloc(r, 0);               \
-               bp = (TPE*)Tloc(b, 0);                    \
-               if (p) {                                  \
-                       pnp = np = (bit*)Tloc(p, 0);          \
-                       end = np + cnt;                       \
-                       for(; np<end; np++) {                 \
-                               if (*np) {                        \
-                                       ncnt = (np - pnp);            \
-                                       rp += ncnt;                   \
-                                       bp += ncnt;                   \
-                                       curval = *(bp - 1);           \
-                                       if(is_##TPE##_nil(curval))    \
-                                               has_nils = true;          \
-                                       for (;rb < rp; rb++)          \
-                                               *rb = curval;             \
-                                       pnp = np;                     \
-                               }                                 \
-                       }                                     \
-                       ncnt = (np - pnp);                    \
-                       rp += ncnt;                           \
-                       bp += ncnt;                           \
-                       curval = *(bp - 1);                   \
-                       if(is_##TPE##_nil(curval))            \
-                               has_nils = true;                  \
-                       for (;rb < rp; rb++)                  \
-                               *rb = curval;                     \
-               } else {                                  \
-                       TPE *rend = rp + cnt;                 \
-                       curval = *(bp + cnt - 1);             \
-                       if(is_##TPE##_nil(curval))            \
-                               has_nils = true;                  \
-                       for(; rp<rend; rp++)                  \
-                               *rp = curval;                     \
-               }                                         \
+#define LAST_CALC(TPE)             \
+       do {                           \
+               curval = *(bp - 1);        \
+               if(is_##TPE##_nil(curval)) \
+                       has_nils = true;       \
+               for (;rb < rp; rb++)       \
+                       *rb = curval;          \
+       } while(0);
+
+#define ANALYTICAL_LAST_IMP(TPE)            \
+       do {                                    \
+               TPE *rp, *rb, *restrict bp, curval; \
+               rb = rp = (TPE*)Tloc(r, 0);         \
+               bp = (TPE*)Tloc(b, 0);              \
+               if (p) {                            \
+                       pnp = np = (bit*)Tloc(p, 0);    \
+                       end = np + cnt;                 \
+                       for(; np<end; np++) {           \
+                               if (*np) {                  \
+                                       ncnt = (np - pnp);      \
+                                       rp += ncnt;             \
+                                       bp += ncnt;             \
+                                       LAST_CALC(TPE)          \
+                                       pnp = np;               \
+                               }                           \
+                       }                               \
+                       ncnt = (np - pnp);              \
+                       rp += ncnt;                     \
+                       bp += ncnt;                     \
+                       LAST_CALC(TPE)                  \
+               } else {                            \
+                       rp += cnt;                      \
+                       bp += cnt;                      \
+                       LAST_CALC(TPE)                  \
+               }                                   \
+       } while(0);
+
+#define ANALYTICAL_LAST_OTHERS                                          \
+       do {                                                                \
+               curval = BUNtail(bpi, i - 1);                                   
\
+               if((*atomcmp)(curval, nil) == 0)                                
\
+                       has_nils = true;                                        
    \
+               for (;j < i; j++) {                                             
\
+                       if ((gdk_res = BUNappend(r, curval, false)) != 
GDK_SUCCEED) \
+                               goto finish;                                    
        \
+               }                                                               
\
        } while(0);
 
 gdk_return
@@ -373,7 +382,7 @@ GDKanalyticallast(BAT *r, BAT *b, BAT *p
        int (*atomcmp)(const void *, const void *);
        const void* restrict nil;
        bool has_nils = false;
-       BUN i, j, ncnt, cnt = BATcount(b);
+       BUN i = 0, j = 0, ncnt, cnt = BATcount(b);
        bit *np, *pnp, *end;
        gdk_return gdk_res = GDK_SUCCEED;
 
@@ -411,33 +420,20 @@ GDKanalyticallast(BAT *r, BAT *b, BAT *p
                        nil = ATOMnilptr(tpe);
                        atomcmp = ATOMcompare(tpe);
                        if (p) {
-                               np = (bit*)Tloc(p, 0);
-                               for(i=0,j=0; i<cnt; i++, np++) {
+                               pnp = np = (bit*)Tloc(p, 0);
+                               end = np + cnt;
+                               for(; np<end; np++) {
                                        if (*np) {
-                                               curval = BUNtail(bpi, i - 1);
-                                               if((*atomcmp)(curval, nil) == 0)
-                                                       has_nils = true;
-                                               for (;j < i; j++) {
-                                                       if ((gdk_res = 
BUNappend(r, curval, false)) != GDK_SUCCEED)
-                                                               goto finish;
-                                               }
+                                               i += (np - pnp);
+                                               ANALYTICAL_LAST_OTHERS
+                                               pnp = np;
                                        }
                                }
-                               curval = BUNtail(bpi, cnt - 1);
-                               if((*atomcmp)(curval, nil) == 0)
-                                       has_nils = true;
-                               for (;j < i; j++) {
-                                       if ((gdk_res = BUNappend(r, curval, 
false)) != GDK_SUCCEED)
-                                               goto finish;
-                               }
+                               i += (np - pnp);
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to