Changeset: eb0531f04f40 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/eb0531f04f40 Added Files: gdk/gdk_calc_addsub.c gdk/gdk_calc_compare.c gdk/gdk_calc_convert.c gdk/gdk_calc_muldiv.c Modified Files: gdk/CMakeLists.txt gdk/gdk_calc.c gdk/gdk_calc_private.h Branch: default Log Message:
Split gdk_calc.c into a couple of different files.
diffs (truncated from 24429 to 300 lines):
diff --git a/gdk/CMakeLists.txt b/gdk/CMakeLists.txt
--- a/gdk/CMakeLists.txt
+++ b/gdk/CMakeLists.txt
@@ -40,6 +40,7 @@ target_sources(bat
PRIVATE
gdk_select.c
gdk_calc.c gdk_calc.h
+ gdk_calc_addsub.c gdk_calc_muldiv.c gdk_calc_convert.c gdk_calc_compare.c
gdk_calc_compare.h gdk_calc_private.h
gdk_ssort.c gdk_ssort_impl.h
gdk_aggr.c
diff --git a/gdk/gdk_calc.c b/gdk/gdk_calc.c
--- a/gdk/gdk_calc.c
+++ b/gdk/gdk_calc.c
@@ -17,45 +17,6 @@
* the candidates, all other values are NIL (so that the output is
* still aligned). */
-/* format strings for the seven/eight basic types we deal with */
-#define FMTbte "%d"
-#define FMTsht "%d"
-#define FMTint "%d"
-#define FMTlng LLFMT
-#ifdef HAVE_HGE
-#define FMThge "%.40g"
-#endif
-#define FMTflt "%.9g"
-#define FMTdbl "%.17g"
-#define FMToid OIDFMT
-
-/* casts; only required for type hge, since there is no genuine format
- * string for it (i.e., for __int128) (yet?) */
-#define CSTbte
-#define CSTsht
-#define CSTint
-#define CSTlng
-#ifdef HAVE_HGE
-#define CSThge (dbl)
-#endif
-#define CSTflt
-#define CSTdbl
-#define CSToid
-
-/* Most of the internal routines return a count of the number of NIL
- * values they produced. They indicate an error by returning a value
- * >= BUN_NONE. BUN_NONE means that the error was dealt with by
- * calling GDKerror (generally for overflow or conversion errors).
- * BUN_NONE+1 is returned by the DIV and MOD functions to indicate
- * division by zero. */
-
-/* replace BATconstant with a version that produces a void bat for
- * TYPE_oid/nil */
-#define BATconstantV(HSEQ, TAILTYPE, VALUE, CNT, ROLE) \
- ((TAILTYPE) == TYPE_oid && ((CNT) == 0 || *(oid*)(VALUE) == oid_nil) \
- ? BATconstant(HSEQ, TYPE_void, VALUE, CNT, ROLE) \
- : BATconstant(HSEQ, TAILTYPE, VALUE, CNT, ROLE))
-
static gdk_return
checkbats(BAT *b1, BAT *b2, const char *func)
{
@@ -66,299 +27,6 @@ checkbats(BAT *b1, BAT *b2, const char *
return GDK_SUCCEED;
}
-#define ON_OVERFLOW1(TYPE, OP) \
- do { \
- GDKerror("22003!overflow in calculation " \
- OP "(" FMT##TYPE ").\n", \
- CST##TYPE src[x]); \
- BBPreclaim(bn); \
- bat_iterator_end(&bi); \
- return NULL; \
- } while (0)
-
-#define ON_OVERFLOW(TYPE1, TYPE2, OP) \
- do { \
- GDKerror("22003!overflow in calculation " \
- FMT##TYPE1 OP FMT##TYPE2 ".\n", \
- CST##TYPE1 ((TYPE1 *)lft)[i], CST##TYPE2 ((TYPE2
*)rgt)[j]); \
- return BUN_NONE; \
- } while (0)
-
-#define UNARY_2TYPE_FUNC(TYPE1, TYPE2, FUNC) \
- do { \
- const TYPE1 *restrict src = (const TYPE1 *) bi.base; \
- TYPE2 *restrict dst = (TYPE2 *) Tloc(bn, 0); \
- TIMEOUT_LOOP_IDX(i, ncand, timeoffset) { \
- x = canditer_next(&ci) - bhseqbase; \
- if (is_##TYPE1##_nil(src[x])) { \
- nils++; \
- dst[i] = TYPE2##_nil; \
- } else { \
- dst[i] = FUNC(src[x]); \
- } \
- } \
- TIMEOUT_CHECK(timeoffset, \
- GOTO_LABEL_TIMEOUT_HANDLER(bailout)); \
- } while (0)
-
-#define UNARY_2TYPE_FUNC_nilcheck(TYPE1, TYPE2, FUNC, on_overflow) \
- do { \
- const TYPE1 *restrict src = (const TYPE1 *) bi.base; \
- TYPE2 *restrict dst = (TYPE2 *) Tloc(bn, 0); \
- TIMEOUT_LOOP_IDX(i, ncand, timeoffset) { \
- x = canditer_next(&ci) - bhseqbase; \
- if (is_##TYPE1##_nil(src[x])) { \
- nils++; \
- dst[i] = TYPE2##_nil; \
- } else { \
- dst[i] = FUNC(src[x]); \
- if (is_##TYPE2##_nil(dst[i])) { \
- on_overflow; \
- } \
- } \
- } \
- TIMEOUT_CHECK(timeoffset, \
- GOTO_LABEL_TIMEOUT_HANDLER(bailout)); \
- } while (0)
-
-#define BINARY_3TYPE_FUNC(TYPE1, TYPE2, TYPE3, FUNC) \
- do { \
- i = j = 0; \
- if (ci1->tpe == cand_dense && ci2->tpe == cand_dense) { \
- TIMEOUT_LOOP_IDX(k, ncand, timeoffset) { \
- if (incr1) \
- i = canditer_next_dense(ci1) -
candoff1; \
- if (incr2) \
- j = canditer_next_dense(ci2) -
candoff2; \
- TYPE1 v1 = ((const TYPE1 *) lft)[i]; \
- TYPE2 v2 = ((const TYPE2 *) rgt)[j]; \
- if (is_##TYPE1##_nil(v1) ||
is_##TYPE2##_nil(v2)) { \
- nils++; \
- ((TYPE3 *) dst)[k] = TYPE3##_nil; \
- } else { \
- ((TYPE3 *) dst)[k] = FUNC(v1, v2); \
- } \
- } \
- TIMEOUT_CHECK(timeoffset, TIMEOUT_HANDLER(BUN_NONE)); \
- } else { \
- TIMEOUT_LOOP_IDX(k, ncand, timeoffset) { \
- if (incr1) \
- i = canditer_next(ci1) - candoff1; \
- if (incr2) \
- j = canditer_next(ci2) - candoff2; \
- TYPE1 v1 = ((const TYPE1 *) lft)[i]; \
- TYPE2 v2 = ((const TYPE2 *) rgt)[j]; \
- if (is_##TYPE1##_nil(v1) ||
is_##TYPE2##_nil(v2)) { \
- nils++; \
- ((TYPE3 *) dst)[k] = TYPE3##_nil; \
- } else { \
- ((TYPE3 *) dst)[k] = FUNC(v1, v2); \
- } \
- } \
- TIMEOUT_CHECK(timeoffset, TIMEOUT_HANDLER(BUN_NONE)); \
- } \
- } while (0)
-
-#define BINARY_3TYPE_FUNC_nilcheck(TYPE1, TYPE2, TYPE3, FUNC, on_overflow) \
- do { \
- i = j = 0; \
- if (ci1->tpe == cand_dense && ci2->tpe == cand_dense) { \
- TIMEOUT_LOOP_IDX(k, ncand, timeoffset) { \
- if (incr1) \
- i = canditer_next_dense(ci1) -
candoff1; \
- if (incr2) \
- j = canditer_next_dense(ci2) -
candoff2; \
- TYPE1 v1 = ((const TYPE1 *) lft)[i]; \
- TYPE2 v2 = ((const TYPE2 *) rgt)[j]; \
- if (is_##TYPE1##_nil(v1) ||
is_##TYPE2##_nil(v2)) { \
- nils++; \
- ((TYPE3 *) dst)[k] = TYPE3##_nil; \
- } else { \
- ((TYPE3 *) dst)[k] = FUNC(v1, v2); \
- if (is_##TYPE3##_nil(((TYPE3 *)
dst)[k])) \
- on_overflow; \
- } \
- } \
- TIMEOUT_CHECK(timeoffset, TIMEOUT_HANDLER(BUN_NONE)); \
- } else { \
- TIMEOUT_LOOP_IDX(k, ncand, timeoffset) { \
- if (incr1) \
- i = canditer_next(ci1) - candoff1; \
- if (incr2) \
- j = canditer_next(ci2) - candoff2; \
- TYPE1 v1 = ((const TYPE1 *) lft)[i]; \
- TYPE2 v2 = ((const TYPE2 *) rgt)[j]; \
- if (is_##TYPE1##_nil(v1) ||
is_##TYPE2##_nil(v2)) { \
- nils++; \
- ((TYPE3 *) dst)[k] = TYPE3##_nil; \
- } else { \
- ((TYPE3 *) dst)[k] = FUNC(v1, v2); \
- if (is_##TYPE3##_nil(((TYPE3 *)
dst)[k])) \
- on_overflow; \
- } \
- } \
- TIMEOUT_CHECK(timeoffset, TIMEOUT_HANDLER(BUN_NONE)); \
- } \
- } while (0)
-
-/* special case for EQ and NE where we have a nil_matches flag for
- * when it is set */
-#define BINARY_3TYPE_FUNC_nilmatch(TYPE1, TYPE2, TYPE3, FUNC) \
- do { \
- i = j = 0; \
- if (ci1->tpe == cand_dense && ci2->tpe == cand_dense) { \
- TIMEOUT_LOOP_IDX(k, ncand, timeoffset) { \
- if (incr1) \
- i = canditer_next_dense(ci1) -
candoff1; \
- if (incr2) \
- j = canditer_next_dense(ci2) -
candoff2; \
- TYPE1 v1 = ((const TYPE1 *) lft)[i]; \
- TYPE2 v2 = ((const TYPE2 *) rgt)[j]; \
- if (is_##TYPE1##_nil(v1) ||
is_##TYPE2##_nil(v2)) { \
- ((TYPE3 *) dst)[k] =
FUNC(is_##TYPE1##_nil(v1), is_##TYPE2##_nil(v2)); \
- } else { \
- ((TYPE3 *) dst)[k] = FUNC(v1, v2); \
- } \
- } \
- TIMEOUT_CHECK(timeoffset, TIMEOUT_HANDLER(BUN_NONE)); \
- } else { \
- TIMEOUT_LOOP_IDX(k, ncand, timeoffset) { \
- if (incr1) \
- i = canditer_next(ci1) - candoff1; \
- if (incr2) \
- j = canditer_next(ci2) - candoff2; \
- TYPE1 v1 = ((const TYPE1 *) lft)[i]; \
- TYPE2 v2 = ((const TYPE2 *) rgt)[j]; \
- if (is_##TYPE1##_nil(v1) ||
is_##TYPE2##_nil(v2)) { \
- ((TYPE3 *) dst)[k] =
FUNC(is_##TYPE1##_nil(v1), is_##TYPE2##_nil(v2)); \
- } else { \
- ((TYPE3 *) dst)[k] = FUNC(v1, v2); \
- } \
- } \
- TIMEOUT_CHECK(timeoffset, TIMEOUT_HANDLER(BUN_NONE)); \
- } \
- } while (0)
-
-#define BINARY_3TYPE_FUNC_nonil(TYPE1, TYPE2, TYPE3, FUNC) \
- do { \
- i = j = 0; \
- if (ci1->tpe == cand_dense && ci2->tpe == cand_dense) { \
- TIMEOUT_LOOP_IDX(k, ncand, timeoffset) { \
- if (incr1) \
- i = canditer_next_dense(ci1) -
candoff1; \
- if (incr2) \
- j = canditer_next_dense(ci2) -
candoff2; \
- TYPE1 v1 = ((const TYPE1 *) lft)[i]; \
- TYPE2 v2 = ((const TYPE2 *) rgt)[j]; \
- ((TYPE3 *) dst)[k] = FUNC(v1, v2); \
- } \
- TIMEOUT_CHECK(timeoffset, TIMEOUT_HANDLER(BUN_NONE)); \
- } else { \
- TIMEOUT_LOOP_IDX(k, ncand, timeoffset) { \
- if (incr1) \
- i = canditer_next(ci1) - candoff1; \
- if (incr2) \
- j = canditer_next(ci2) - candoff2; \
- TYPE1 v1 = ((const TYPE1 *) lft)[i]; \
- TYPE2 v2 = ((const TYPE2 *) rgt)[j]; \
- ((TYPE3 *) dst)[k] = FUNC(v1, v2); \
- } \
- TIMEOUT_CHECK(timeoffset, TIMEOUT_HANDLER(BUN_NONE)); \
- } \
- } while (0)
-
-#define BINARY_3TYPE_FUNC_nonil_nilcheck(TYPE1, TYPE2, TYPE3, FUNC,
on_overflow) \
- do { \
- i = j = 0; \
- if (ci1->tpe == cand_dense && ci2->tpe == cand_dense) { \
- TIMEOUT_LOOP_IDX(k, ncand, timeoffset) { \
- if (incr1) \
- i = canditer_next_dense(ci1) -
candoff1; \
- if (incr2) \
- j = canditer_next_dense(ci2) -
candoff2; \
- TYPE1 v1 = ((const TYPE1 *) lft)[i]; \
- TYPE2 v2 = ((const TYPE2 *) rgt)[j]; \
- ((TYPE3 *) dst)[k] = FUNC(v1, v2); \
- if (is_##TYPE3##_nil(((TYPE3 *) dst)[k])) \
- on_overflow; \
- } \
- TIMEOUT_CHECK(timeoffset, TIMEOUT_HANDLER(BUN_NONE)); \
- } else { \
- TIMEOUT_LOOP_IDX(k, ncand, timeoffset) { \
- if (incr1) \
- i = canditer_next(ci1) - candoff1; \
- if (incr2) \
- j = canditer_next(ci2) - candoff2; \
- TYPE1 v1 = ((const TYPE1 *) lft)[i]; \
- TYPE2 v2 = ((const TYPE2 *) rgt)[j]; \
- ((TYPE3 *) dst)[k] = FUNC(v1, v2); \
- if (is_##TYPE3##_nil(((TYPE3 *) dst)[k])) \
- on_overflow; \
- } \
- TIMEOUT_CHECK(timeoffset, TIMEOUT_HANDLER(BUN_NONE)); \
- } \
- } while (0)
-
-#define BINARY_3TYPE_FUNC_CHECK(TYPE1, TYPE2, TYPE3, FUNC, CHECK) \
- do { \
- i = j = 0; \
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]
