Changeset: 2b7efe52d82a for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/2b7efe52d82a Modified Files: gdk/gdk_aggr.c gdk/gdk_analytic_bounds.c gdk/gdk_analytic_func.c gdk/gdk_batop.c gdk/gdk_calc_private.h Branch: nilmask Log Message:
Work in progress adding unsigned types support.
diffs (truncated from 1098 to 300 lines):
diff --git a/gdk/gdk_aggr.c b/gdk/gdk_aggr.c
--- a/gdk/gdk_aggr.c
+++ b/gdk/gdk_aggr.c
@@ -3012,8 +3012,6 @@ BATgroupavg3(BAT **avgp, BAT **remp, BAT
}
break;
}
-#endif
-#ifdef HAVE_UHGE
case TYPE_uhge: {
const uhge *vals = (const uhge *) bi.base;
uhge *avgs = Tloc(bn, 0);
diff --git a/gdk/gdk_analytic_bounds.c b/gdk/gdk_analytic_bounds.c
--- a/gdk/gdk_analytic_bounds.c
+++ b/gdk/gdk_analytic_bounds.c
@@ -107,19 +107,34 @@ GDKanalyticaldiff(BAT *b, BAT *p, const
case TYPE_bte:
ANALYTICAL_DIFF_IMP(bte);
break;
+ case TYPE_ubte:
+ ANALYTICAL_DIFF_IMP(ubte);
+ break;
case TYPE_sht:
ANALYTICAL_DIFF_IMP(sht);
break;
+ case TYPE_usht:
+ ANALYTICAL_DIFF_IMP(usht);
+ break;
case TYPE_int:
ANALYTICAL_DIFF_IMP(int);
break;
+ case TYPE_uint:
+ ANALYTICAL_DIFF_IMP(uint);
+ break;
case TYPE_lng:
ANALYTICAL_DIFF_IMP(lng);
break;
+ case TYPE_ulng:
+ ANALYTICAL_DIFF_IMP(ulng);
+ break;
#ifdef HAVE_HGE
case TYPE_hge:
ANALYTICAL_DIFF_IMP(hge);
break;
+ case TYPE_uhge:
+ ANALYTICAL_DIFF_IMP(uhge);
+ break;
#endif
case TYPE_flt:
if (bi.nonil) {
@@ -189,6 +204,16 @@ GDKanalyticaldiff(BAT *b, BAT *p, const
} \
} while (0)
+#define ANALYTICAL_WINDOW_BOUNDS_ROWS_UPRECEDING(TPE, LIMIT, UPCAST) \
+ do { \
+ j = k; \
+ for (; k < i; k++) { \
+ TPE olimit = LIMIT; \
+ oid rlimit = UPCAST; \
+ rb[k] = rlimit > k - j ? j : k - rlimit + second_half; \
+ } \
+ } while (0)
+
#define ANALYTICAL_WINDOW_BOUNDS_ROWS_FOLLOWING(TPE, LIMIT, UPCAST) \
do { \
for (; k < i; k++) { \
@@ -200,6 +225,15 @@ GDKanalyticaldiff(BAT *b, BAT *p, const
} \
} while (0)
+#define ANALYTICAL_WINDOW_BOUNDS_ROWS_UFOLLOWING(TPE, LIMIT, UPCAST) \
+ do { \
+ for (; k < i; k++) { \
+ TPE olimit = LIMIT; \
+ oid rlimit = UPCAST + second_half; \
+ rb[k] = rlimit > i - k ? i : k + rlimit; \
+ } \
+ } while (0)
+
#define ANALYTICAL_WINDOW_BOUNDS_BRANCHES_ROWS(IMP, CARD, TPE, LIMIT, UPCAST) \
do { \
if (p) { \
@@ -238,6 +272,25 @@ GDKanalyticaldiff(BAT *b, BAT *p, const
} \
} while (0)
+#define ANALYTICAL_WINDOW_BOUNDS_GROUPS_UPRECEDING(TPE, LIMIT, UPCAST) \
+ do { \
+ oid m = k; \
+ for (; k < i; k++) { \
+ TPE olimit = LIMIT; \
+ oid rlimit = UPCAST; \
+ for (j = k; ; j--) { \
+ if (bp[j]) { \
+ if (rlimit == 0) \
+ break; \
+ rlimit--; \
+ } \
+ if (j == m) \
+ break; \
+ } \
+ rb[k] = j; \
+ } \
+ } while (0)
+
#define ANALYTICAL_WINDOW_BOUNDS_GROUPS_FOLLOWING(TPE, LIMIT, UPCAST) \
do { \
for (; k < i; k++) { \
@@ -256,6 +309,22 @@ GDKanalyticaldiff(BAT *b, BAT *p, const
} \
} while (0)
+#define ANALYTICAL_WINDOW_BOUNDS_GROUPS_UFOLLOWING(TPE, LIMIT, UPCAST) \
+ do { \
+ for (; k < i; k++) { \
+ TPE olimit = LIMIT; \
+ oid rlimit = UPCAST; \
+ for (j = k + 1; j < i; j++) { \
+ if (bp[j]) { \
+ if (rlimit == 0) \
+ break; \
+ rlimit--; \
+ } \
+ } \
+ rb[k] = j; \
+ } \
+ } while (0)
+
#define ANALYTICAL_WINDOW_BOUNDS_BRANCHES_GROUPS(IMP, CARD, TPE, LIMIT,
UPCAST) \
do { \
if (p) { \
@@ -330,6 +399,26 @@ GDKanalyticaldiff(BAT *b, BAT *p, const
} \
} while (0)
+#define ANALYTICAL_WINDOW_BOUNDS_RANGE_UPRECEDING(TPE1, LIMIT, TPE2) \
+ do { \
+ oid m = k; \
+ TPE1 v, calc; \
+ for (; k < i; k++) { \
+ TPE2 olimit = LIMIT; \
+ v = bp[k]; \
+ for (j = k; ; j--) { \
+ SUB_WITH_CHECK(v, bp[j], TPE1, calc,
GDK_##TPE1##_max, goto calc_overflow); \
+ if (calc > olimit) { \
+ j++; \
+ break; \
+ } \
+ if (j == m) \
+ break; \
+ } \
+ rb[k] = j; \
+ } \
+ } while (0)
+
#define ANALYTICAL_WINDOW_BOUNDS_RANGE_FOLLOWING(TPE1, LIMIT, TPE2) \
do { \
TPE1 v, calc; \
@@ -371,6 +460,21 @@ GDKanalyticaldiff(BAT *b, BAT *p, const
} \
} while (0)
+#define ANALYTICAL_WINDOW_BOUNDS_RANGE_UFOLLOWING(TPE1, LIMIT, TPE2) \
+ do { \
+ TPE1 v, calc; \
+ for (; k < i; k++) { \
+ TPE2 olimit = LIMIT; \
+ v = bp[k]; \
+ for (j = k + 1; j < i; j++) { \
+ SUB_WITH_CHECK(v, bp[j], TPE1, calc,
GDK_##TPE1##_max, goto calc_overflow); \
+ if (calc > olimit) \
+ break; \
+ } \
+ rb[k] = j; \
+ } \
+ } while (0)
+
#define ANALYTICAL_WINDOW_BOUNDS_CALC_NUM(TPE1, IMP, CARD, LIMIT, TPE2)
\
do { \
const TPE1 *restrict bp = (TPE1*)bi.base; \
@@ -409,6 +513,26 @@ GDKanalyticaldiff(BAT *b, BAT *p, const
} \
} while (0)
+#define ANALYTICAL_WINDOW_BOUNDS_BRANCHES_RANGE_UNUM(IMP, CARD, LIMIT, TPE2) \
+ do { \
+ switch (tp1) { \
+ case TYPE_ubte: \
+ ANALYTICAL_WINDOW_BOUNDS_CALC_NUM(ubte,
ANALYTICAL_WINDOW_BOUNDS_RANGE##IMP, CARD, LIMIT, TPE2); \
+ break; \
+ case TYPE_usht: \
+ ANALYTICAL_WINDOW_BOUNDS_CALC_NUM(usht,
ANALYTICAL_WINDOW_BOUNDS_RANGE##IMP, CARD, LIMIT, TPE2); \
+ break; \
+ case TYPE_uint: \
+ ANALYTICAL_WINDOW_BOUNDS_CALC_NUM(uint,
ANALYTICAL_WINDOW_BOUNDS_RANGE##IMP, CARD, LIMIT, TPE2); \
+ break; \
+ case TYPE_ulng: \
+ ANALYTICAL_WINDOW_BOUNDS_CALC_NUM(ulng,
ANALYTICAL_WINDOW_BOUNDS_RANGE##IMP, CARD, LIMIT, TPE2); \
+ break; \
+ default: \
+ goto type_not_supported; \
+ } \
+ } while (0)
+
#define ANALYTICAL_WINDOW_BOUNDS_BRANCHES_RANGE_FLT(IMP, CARD, LIMIT) \
do { \
switch (tp1) { \
@@ -454,6 +578,29 @@ GDKanalyticaldiff(BAT *b, BAT *p, const
goto type_not_supported; \
} \
} while (0)
+
+#define ANALYTICAL_WINDOW_BOUNDS_BRANCHES_RANGE_UHGE(IMP, CARD, LIMIT) \
+ do { \
+ switch (tp1) { \
+ case TYPE_ubte: \
+ ANALYTICAL_WINDOW_BOUNDS_CALC_NUM(ubte,
ANALYTICAL_WINDOW_BOUNDS_RANGE##IMP, CARD, LIMIT, uhge); \
+ break; \
+ case TYPE_usht: \
+ ANALYTICAL_WINDOW_BOUNDS_CALC_NUM(usht,
ANALYTICAL_WINDOW_BOUNDS_RANGE##IMP, CARD, LIMIT, uhge); \
+ break; \
+ case TYPE_uint: \
+ ANALYTICAL_WINDOW_BOUNDS_CALC_NUM(uint,
ANALYTICAL_WINDOW_BOUNDS_RANGE##IMP, CARD, LIMIT, uhge); \
+ break; \
+ case TYPE_ulng: \
+ ANALYTICAL_WINDOW_BOUNDS_CALC_NUM(ulng,
ANALYTICAL_WINDOW_BOUNDS_RANGE##IMP, CARD, LIMIT, uhge); \
+ break; \
+ case TYPE_uhge: \
+ ANALYTICAL_WINDOW_BOUNDS_CALC_NUM(uhge,
ANALYTICAL_WINDOW_BOUNDS_RANGE##IMP, CARD, LIMIT, uhge); \
+ break; \
+ default: \
+ goto type_not_supported; \
+ } \
+ } while (0)
#endif
#define date_sub_month(D,M) date_add_month(D,-(M))
@@ -732,6 +879,13 @@ GDKanalyticalpeers(BAT *b, BAT *p, bool
ANALYTICAL_WINDOW_BOUNDS_BRANCHES_PEERS(_FOLLOWING,
bte, NO_NAN_CHECK);
}
break;
+ case TYPE_ubte:
+ if (preceding) {
+ ANALYTICAL_WINDOW_BOUNDS_BRANCHES_PEERS(_PRECEDING,
ubte, NO_NAN_CHECK);
+ } else {
+ ANALYTICAL_WINDOW_BOUNDS_BRANCHES_PEERS(_FOLLOWING,
ubte, NO_NAN_CHECK);
+ }
+ break;
case TYPE_sht:
if (preceding) {
ANALYTICAL_WINDOW_BOUNDS_BRANCHES_PEERS(_PRECEDING,
sht, NO_NAN_CHECK);
@@ -739,6 +893,13 @@ GDKanalyticalpeers(BAT *b, BAT *p, bool
ANALYTICAL_WINDOW_BOUNDS_BRANCHES_PEERS(_FOLLOWING,
sht, NO_NAN_CHECK);
}
break;
+ case TYPE_usht:
+ if (preceding) {
+ ANALYTICAL_WINDOW_BOUNDS_BRANCHES_PEERS(_PRECEDING,
usht, NO_NAN_CHECK);
+ } else {
+ ANALYTICAL_WINDOW_BOUNDS_BRANCHES_PEERS(_FOLLOWING,
usht, NO_NAN_CHECK);
+ }
+ break;
case TYPE_int:
if (preceding) {
ANALYTICAL_WINDOW_BOUNDS_BRANCHES_PEERS(_PRECEDING,
int, NO_NAN_CHECK);
@@ -746,6 +907,13 @@ GDKanalyticalpeers(BAT *b, BAT *p, bool
ANALYTICAL_WINDOW_BOUNDS_BRANCHES_PEERS(_FOLLOWING,
int, NO_NAN_CHECK);
}
break;
+ case TYPE_uint:
+ if (preceding) {
+ ANALYTICAL_WINDOW_BOUNDS_BRANCHES_PEERS(_PRECEDING,
uint, NO_NAN_CHECK);
+ } else {
+ ANALYTICAL_WINDOW_BOUNDS_BRANCHES_PEERS(_FOLLOWING,
uint, NO_NAN_CHECK);
+ }
+ break;
case TYPE_lng:
if (preceding) {
ANALYTICAL_WINDOW_BOUNDS_BRANCHES_PEERS(_PRECEDING,
lng, NO_NAN_CHECK);
@@ -753,6 +921,13 @@ GDKanalyticalpeers(BAT *b, BAT *p, bool
ANALYTICAL_WINDOW_BOUNDS_BRANCHES_PEERS(_FOLLOWING,
lng, NO_NAN_CHECK);
}
break;
+ case TYPE_ulng:
+ if (preceding) {
+ ANALYTICAL_WINDOW_BOUNDS_BRANCHES_PEERS(_PRECEDING,
ulng, NO_NAN_CHECK);
+ } else {
+ ANALYTICAL_WINDOW_BOUNDS_BRANCHES_PEERS(_FOLLOWING,
ulng, NO_NAN_CHECK);
+ }
+ break;
#ifdef HAVE_HGE
case TYPE_hge:
if (preceding) {
@@ -761,6 +936,13 @@ GDKanalyticalpeers(BAT *b, BAT *p, bool
ANALYTICAL_WINDOW_BOUNDS_BRANCHES_PEERS(_FOLLOWING,
hge, NO_NAN_CHECK);
}
break;
+ case TYPE_uhge:
+ if (preceding) {
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]
