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

Added missing hge integer case for GDKanalyticalnthvalue, also when there are 
no null values for flt and dbl cases in GDKanalyticaldiff, use the regular case


diffs (141 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
@@ -87,12 +87,20 @@ GDKanalyticaldiff(BAT *r, BAT *b, BAT *p
                ANALYTICAL_DIFF_IMP(hge);
                break;
 #endif
-       case TYPE_flt:
-               ANALYTICAL_DIFF_FLOAT_IMP(flt);
-               break;
-       case TYPE_dbl:
-               ANALYTICAL_DIFF_FLOAT_IMP(dbl);
-               break;
+       case TYPE_flt: {
+               if (b->tnonil) {
+                       ANALYTICAL_DIFF_IMP(flt);
+               } else { /* Because of NaN values, use this path */
+                       ANALYTICAL_DIFF_FLOAT_IMP(flt);
+               }
+       } break;
+       case TYPE_dbl: {
+               if (b->tnonil) {
+                       ANALYTICAL_DIFF_IMP(dbl);
+               } else { /* Because of NaN values, use this path */
+                       ANALYTICAL_DIFF_FLOAT_IMP(dbl);
+               }
+       } break;
        default:{
                BATiter it = bat_iterator(b);
                ptr v = BUNtail(it, 0), next;
@@ -397,14 +405,14 @@ GDKanalyticallast(BAT *r, BAT *b, BAT *s
                }                                                       \
        } while (0)
 
-#define ANALYTICAL_NTHVALUE_IMP_MULTI_FIXED(TPE1, TPE2)                        
\
+#define ANALYTICAL_NTHVALUE_IMP_MULTI_FIXED(TPE1, TPE2, TPE3)                  
\
        do {                                                            \
                TPE2 *restrict lp = (TPE2*)Tloc(l, 0);                  \
                for (; i < cnt; i++, rb++) {                            \
                        TPE2 lnth = lp[i];                              \
                        bs = bp + start[i];                             \
                        be = bp + end[i];                               \
-                       if (is_##TPE2##_nil(lnth) || be <= bs || (lng)(lnth - 
1) > (end[i] - start[i])) \
+                       if (is_##TPE2##_nil(lnth) || be <= bs || (TPE3)(lnth - 
1) > (TPE3)(end[i] - start[i])) \
                                curval = TPE1##_nil;                    \
                        else                                            \
                                curval = *(bs + lnth - 1);              \
@@ -414,6 +422,15 @@ GDKanalyticallast(BAT *r, BAT *b, BAT *s
                }                                                       \
        } while (0)
 
+#ifdef HAVE_HGE
+#define ANALYTICAL_NTHVALUE_CALC_FIXED_HGE(TPE1)                       \
+       case TYPE_hge:                                                  \
+               ANALYTICAL_NTHVALUE_IMP_MULTI_FIXED(TPE1, hge, hge); \
+               break;
+#else
+#define ANALYTICAL_NTHVALUE_CALC_FIXED_HGE(TPE1)
+#endif
+
 #define ANALYTICAL_NTHVALUE_CALC_FIXED(TPE1)                           \
        do {                                                            \
                TPE1 *bp, *bs, *be, curval, *restrict rb;               \
@@ -421,28 +438,29 @@ GDKanalyticallast(BAT *r, BAT *b, BAT *s
                rb = (TPE1*)Tloc(r, 0);                                 \
                switch (tp2) {                                          \
                case TYPE_bte:                                          \
-                       ANALYTICAL_NTHVALUE_IMP_MULTI_FIXED(TPE1, bte); \
+                       ANALYTICAL_NTHVALUE_IMP_MULTI_FIXED(TPE1, bte, lng); \
                        break;                                          \
                case TYPE_sht:                                          \
-                       ANALYTICAL_NTHVALUE_IMP_MULTI_FIXED(TPE1, sht); \
+                       ANALYTICAL_NTHVALUE_IMP_MULTI_FIXED(TPE1, sht, lng); \
                        break;                                          \
                case TYPE_int:                                          \
-                       ANALYTICAL_NTHVALUE_IMP_MULTI_FIXED(TPE1, int); \
+                       ANALYTICAL_NTHVALUE_IMP_MULTI_FIXED(TPE1, int, lng); \
                        break;                                          \
                case TYPE_lng:                                          \
-                       ANALYTICAL_NTHVALUE_IMP_MULTI_FIXED(TPE1, lng); \
+                       ANALYTICAL_NTHVALUE_IMP_MULTI_FIXED(TPE1, lng, lng); \
                        break;                                          \
+               ANALYTICAL_NTHVALUE_CALC_FIXED_HGE(TPE1) \
                default:                                                \
                        goto nosupport;                                 \
                }                                                       \
        } while (0)
 
-#define ANALYTICAL_NTHVALUE_IMP_MULTI_VARSIZED(TPE2)                   \
+#define ANALYTICAL_NTHVALUE_IMP_MULTI_VARSIZED(TPE1, TPE2)                     
\
        do {                                                            \
-               TPE2 *restrict lp = (TPE2*)Tloc(l, 0);                  \
+               TPE1 *restrict lp = (TPE1*)Tloc(l, 0);                  \
                for (; i < cnt; i++) {                                  \
-                       TPE2 lnth = lp[i];                              \
-                       if (is_##TPE2##_nil(lnth) || end[i] <= start[i] || 
(lng)(lnth - 1) > (end[i] - start[i])) \
+                       TPE1 lnth = lp[i];                              \
+                       if (is_##TPE1##_nil(lnth) || end[i] <= start[i] || 
(TPE2)(lnth - 1) > (TPE2)(end[i] - start[i])) \
                                curval = (void *) nil;                  \
                        else                                            \
                                curval = BUNtail(bpi, (BUN) (start[i] + lnth - 
1)); \
@@ -484,6 +502,12 @@ GDKanalyticalnthvalue(BAT *r, BAT *b, BA
                case TYPE_lng:{
                        nth = *(lng *) bound;
                } break;
+#ifdef HAVE_HGE
+               case TYPE_hge:{
+                       hge nval = *(hge *) bound;
+                       nth = is_hge_nil(nval) ? lng_nil : (nval > (hge) 
GDK_lng_max) ? GDK_lng_max : (lng) nval;
+               } break;
+#endif
                default:
                        goto nosupport;
                }
@@ -565,17 +589,22 @@ GDKanalyticalnthvalue(BAT *r, BAT *b, BA
                        BATiter bpi = bat_iterator(b);
                        switch (tp2) {
                        case TYPE_bte:
-                               ANALYTICAL_NTHVALUE_IMP_MULTI_VARSIZED(bte);
+                               ANALYTICAL_NTHVALUE_IMP_MULTI_VARSIZED(bte, 
lng);
                                break;
                        case TYPE_sht:
-                               ANALYTICAL_NTHVALUE_IMP_MULTI_VARSIZED(sht);
+                               ANALYTICAL_NTHVALUE_IMP_MULTI_VARSIZED(sht, 
lng);
                                break;
                        case TYPE_int:
-                               ANALYTICAL_NTHVALUE_IMP_MULTI_VARSIZED(int);
+                               ANALYTICAL_NTHVALUE_IMP_MULTI_VARSIZED(int, 
lng);
                                break;
                        case TYPE_lng:
-                               ANALYTICAL_NTHVALUE_IMP_MULTI_VARSIZED(lng);
+                               ANALYTICAL_NTHVALUE_IMP_MULTI_VARSIZED(lng, 
lng);
                                break;
+#ifdef HAVE_HGE
+                       case TYPE_hge:
+                               ANALYTICAL_NTHVALUE_IMP_MULTI_VARSIZED(hge, 
hge);
+                               break;
+#endif
                        default:
                                goto nosupport;
                        }
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to