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
