Changeset: 7d3c11850670 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=7d3c11850670
Modified Files:
        NT/monetdb_config.h.in
        configure.ag
        gdk/gdk.h
        gdk/gdk_calc_private.h
        gdk/gdk_search.c
        gdk/gdk_search.h
Branch: default
Log Message:

Some cleanup.


diffs (282 lines):

diff --git a/NT/monetdb_config.h.in b/NT/monetdb_config.h.in
--- a/NT/monetdb_config.h.in
+++ b/NT/monetdb_config.h.in
@@ -1036,19 +1036,23 @@ typedef unsigned __int64 uint64_t;
 
 #ifdef HAVE_LONG_LONG
 typedef long long lng;
+typedef unsigned long long ulng;
 # define SIZEOF_LNG SIZEOF_LONG_LONG
 #else
 typedef __int64 lng;
+typedef unsigned __int64 ulng;
 # define SIZEOF_LNG SIZEOF___INT64
 #endif
 
 #ifdef HAVE___INT128
 typedef __int128 hge;
+typedef unsigned __int128 uhge;
 # define HAVE_HGE 1
 # define SIZEOF_HGE SIZEOF___INT128
 #else
 # if defined(HAVE___INT128_T) && defined(HAVE___UINT128_T)
 typedef __int128_t hge;
+typedef __uint128_t uhge;
 #  define HAVE_HGE 1
 #  define SIZEOF_HGE SIZEOF___INT128_T
 # endif
diff --git a/configure.ag b/configure.ag
--- a/configure.ag
+++ b/configure.ag
@@ -3121,21 +3121,25 @@ typedef size_t uintptr_t;
 
 #ifdef HAVE_LONG_LONG
 typedef long long lng;
+typedef unsigned long long ulng;
 # define SIZEOF_LNG SIZEOF_LONG_LONG
 #else
 # ifdef HAVE___INT64
 typedef __int64 lng;
+typedef unsigned __int64 ulng;
 #  define SIZEOF_LNG SIZEOF___INT64
 # endif
 #endif
 
 #ifdef HAVE___INT128
 typedef __int128 hge;
+typedef unsigned __int128 uhge;
 # define HAVE_HGE 1
 # define SIZEOF_HGE SIZEOF___INT128
 #else
 # if defined(HAVE___INT128_T) && defined(HAVE___UINT128_T)
 typedef __int128_t hge;
+typedef __uint128_t uhge;
 #  define HAVE_HGE 1
 #  define SIZEOF_HGE SIZEOF___INT128_T
 # endif
diff --git a/gdk/gdk.h b/gdk/gdk.h
--- a/gdk/gdk.h
+++ b/gdk/gdk.h
@@ -2895,30 +2895,15 @@ gdk_export void ALIGNsetH(BAT *b1, BAT *
  * @item HASHloop
  * @tab
  *  (BAT *b; Hash *h, size_t dummy; ptr value)
- * @item HASHloop_bit
- * @tab
- *  (BAT *b; Hash *h, size_t idx; bit *value, BUN w)
  * @item HASHloop_bte
  * @tab
  *  (BAT *b; Hash *h, size_t idx; bte *value, BUN w)
  * @item HASHloop_sht
  * @tab
  *  (BAT *b; Hash *h, size_t idx; sht *value, BUN w)
- * @item HASHloop_bat
- * @tab
- *  (BAT *b; Hash *h, size_t idx; bat *value, BUN w)
- * @item HASHloop_ptr
- * @tab
- *  (BAT *b; Hash *h, size_t idx; ptr *value, BUN w)
  * @item HASHloop_int
  * @tab
  *  (BAT *b; Hash *h, size_t idx; int *value, BUN w)
- * @item HASHloop_oid
- * @tab
- *  (BAT *b; Hash *h, size_t idx; oid *value, BUN w)
- * @item HASHloop_wrd
- * @tab
- *  (BAT *b; Hash *h, size_t idx; wrd *value, BUN w)
  * @item HASHloop_flt
  * @tab
  *  (BAT *b; Hash *h, size_t idx; flt *value, BUN w)
@@ -3016,17 +3001,6 @@ gdk_export void ALIGNsetH(BAT *b1, BAT *
                if (GDK_STREQ(v, BUNtvar(bi, hb)))
 
 /*
- * For string search, we can optimize if the string heap has
- * eliminated all doubles. This is the case when not too many
- * different strings are stored in the heap. You can check this with
- * the macro strElimDoubles() If so, we can just compare integer index
- * numbers instead of strings:
- */
-#define HASHloop_fstr(bi, h, hb, idx, v)                               \
-       for (hb = HASHget(h, strHash(v)&h->mask), idx = 
strLocate((bi.b)->T->vheap,v); \
-            hb != HASHnil(h); hb = HASHgetlink(h,hb))                          
\
-               if (VarHeapValRaw((bi).b->T->heap.base, hb, (bi).b->T->width) 
== idx)
-/*
  * The following example shows how the hashloop is used:
  *
  * @verbatim
@@ -3070,26 +3044,15 @@ gdk_export void ALIGNsetH(BAT *b1, BAT *
             hb = HASHgetlink(h,hb))                            \
                if (simple_EQ(v, BUNtloc(bi, hb), TYPE))
 
-#define HASHloop_bit(bi, h, hb, v)     HASHloop_TYPE(bi, h, hb, v, bte)
 #define HASHloop_bte(bi, h, hb, v)     HASHloop_TYPE(bi, h, hb, v, bte)
 #define HASHloop_sht(bi, h, hb, v)     HASHloop_TYPE(bi, h, hb, v, sht)
 #define HASHloop_int(bi, h, hb, v)     HASHloop_TYPE(bi, h, hb, v, int)
-#define HASHloop_wrd(bi, h, hb, v)     HASHloop_TYPE(bi, h, hb, v, wrd)
 #define HASHloop_lng(bi, h, hb, v)     HASHloop_TYPE(bi, h, hb, v, lng)
 #ifdef HAVE_HGE
 #define HASHloop_hge(bi, h, hb, v)     HASHloop_TYPE(bi, h, hb, v, hge)
 #endif
-#define HASHloop_oid(bi, h, hb, v)     HASHloop_TYPE(bi, h, hb, v, oid)
-#define HASHloop_bat(bi, h, hb, v)     HASHloop_TYPE(bi, h, hb, v, bat)
 #define HASHloop_flt(bi, h, hb, v)     HASHloop_TYPE(bi, h, hb, v, flt)
 #define HASHloop_dbl(bi, h, hb, v)     HASHloop_TYPE(bi, h, hb, v, dbl)
-#define HASHloop_ptr(bi, h, hb, v)     HASHloop_TYPE(bi, h, hb, v, ptr)
-
-#define HASHloop_any(bi, h, hb, v)                             \
-       for (hb = HASHget(h, hash_any(h, v));                   \
-            hb != HASHnil(h);                                  \
-            hb = HASHgetlink(h,hb))                            \
-               if (atom_EQ(v, BUNtail(bi, hb), (bi).b->ttype))
 
 /*
  * @- loop over a BAT with ordered tail
diff --git a/gdk/gdk_calc_private.h b/gdk/gdk_calc_private.h
--- a/gdk/gdk_calc_private.h
+++ b/gdk/gdk_calc_private.h
@@ -12,22 +12,6 @@
 #error this file should not be included outside its source directory
 #endif
 
-#ifdef HAVE_LONG_LONG
-typedef unsigned long long ulng;
-#else
-typedef unsigned __int64 ulng;
-#endif
-
-#ifdef HAVE_HGE
-#ifdef HAVE___INT128
-typedef unsigned __int128 uhge;
-#else
-#ifdef HAVE___UINT128_T
-typedef __uint128_t uhge;
-#endif
-#endif
-#endif
-
 /* signed version of BUN */
 #if SIZEOF_BUN == SIZEOF_INT
 #define SBUN   int
diff --git a/gdk/gdk_search.c b/gdk/gdk_search.c
--- a/gdk/gdk_search.c
+++ b/gdk/gdk_search.c
@@ -98,15 +98,25 @@ HASHwidth(BUN hashsize)
 BUN
 HASHmask(BUN cnt)
 {
-       BUN m = 1 << 8; /* minimum size; == BATTINY */
+       BUN m = cnt;
 
-       /* find largest power of 2 smaller than cnt */
-       while (m + m < cnt)
-               m += m;
-       /* if cnt is more than 1/3 into the gap between m & 2*m,
+       /* find largest power of 2 smaller than or equal to cnt */
+       m |= m >> 1;
+       m |= m >> 2;
+       m |= m >> 4;
+       m |= m >> 8;
+       m |= m >> 16;
+#if SIZEOF_BUN == 8
+       m |= m >> 32;
+#endif
+       m -= m >> 1;
+
+       /* if cnt is more than 1/3 into the gap between m and 2*m,
           double m */
        if (m + m - cnt < 2 * (cnt - m))
                m += m;
+       if (m < BATTINY)
+               m = BATTINY;
        return m;
 }
 
diff --git a/gdk/gdk_search.h b/gdk/gdk_search.h
--- a/gdk/gdk_search.h
+++ b/gdk/gdk_search.h
@@ -128,29 +128,35 @@ gdk_export BUN HASHlist(Hash *h, BUN i);
        } while (0)
 #endif
 
+#define mix_bte(X)     ((unsigned int) (X))
+#define mix_sht(X)     ((unsigned int) (X))
 #define mix_int(X)     (((X)>>7)^((X)>>13)^((X)>>21)^(X))
+#define mix_lng(X)     mix_int((unsigned int) ((X) ^ ((X) >> 32)))
+#ifdef HAVE_HGE
+#define mix_hge(X)     mix_int((unsigned int) ((X) ^ ((X) >> 32) ^ \
+                                               ((X) >> 64) ^ ((X) >> 96)))
+#endif
 #define hash_loc(H,V)  hash_any(H,V)
 #define hash_var(H,V)  hash_any(H,V)
 #define hash_any(H,V)  (ATOMhash((H)->type, (V)) & (H)->mask)
 #define heap_hash_any(hp,H,V)  ((hp) && (hp)->hashash ? ((BUN *) (V))[-1] & 
(H)->mask : hash_any(H,V))
-#define hash_bte(H,V)  (assert(((H)->mask & 0xFF) == 0xFF), (BUN) *(const 
unsigned char*) (V))
-#define hash_sht(H,V)  (assert(((H)->mask & 0xFFFF) == 0xFFFF), (BUN) *(const 
unsigned short*) (V))
-#define hash_int(H,V)  ((BUN) mix_int(*((const unsigned int*) (V))) & 
(H)->mask)
+#define hash_bte(H,V)  (assert(((H)->mask & 0xFF) == 0xFF), (BUN) 
mix_bte(*(const unsigned char*) (V)))
+#define hash_sht(H,V)  (assert(((H)->mask & 0xFFFF) == 0xFFFF), (BUN) 
mix_sht(*(const unsigned short*) (V)))
+#define hash_int(H,V)  ((BUN) mix_int(*(const unsigned int *) (V)) & (H)->mask)
 /* XXX return size_t-sized value for 8-byte oid? */
-#define hash_lng(H,V)  ((BUN) mix_int((unsigned int) (*(const lng *)(V) ^ 
(*(const lng *)(V) >> 32))) & (H)->mask)
+#define hash_lng(H,V)  ((BUN) mix_lng(*(const ulng *) (V)) & (H)->mask)
 #ifdef HAVE_HGE
-#define hash_hge(H,V)  ((BUN) mix_int((unsigned int) (*(const hge *)(V) ^ 
(*(const hge *)(V) >> 32) ^ \
-                                                      (*(const hge *)(V) >> 
64) ^ (*(const hge *)(V) >> 96))) & (H)->mask)
+#define hash_hge(H,V)  ((BUN) mix_hge(*(const uhge *) (V)) & (H)->mask)
 #endif
 #if SIZEOF_OID == SIZEOF_INT
-#define hash_oid(H,V)  ((BUN) mix_int((unsigned int) *((const oid*) (V))) & 
(H)->mask)
+#define hash_oid(H,V)  hash_int(H,V)
 #else
-#define hash_oid(H,V)  ((BUN) mix_int((unsigned int) (*(const oid *)(V) ^ 
(*(const oid *)(V) >> 32))) & (H)->mask)
+#define hash_oid(H,V)  hash_lng(H,V)
 #endif
 #if SIZEOF_WRD == SIZEOF_INT
-#define hash_wrd(H,V)  ((BUN) mix_int((unsigned int) *((const wrd*) (V))) & 
(H)->mask)
+#define hash_wrd(H,V)  hash_int(H,V)
 #else
-#define hash_wrd(H,V)  ((BUN) mix_int((unsigned int) (*(const wrd *)(V) ^ 
(*(const wrd *)(V) >> 32))) & (H)->mask)
+#define hash_wrd(H,V)  hash_lng(H,V)
 #endif
 
 #define hash_flt(H,V)  hash_int(H,V)
@@ -168,18 +174,6 @@ gdk_export BUN HASHlist(Hash *h, BUN i);
                } else                                                  \
                        goto hashfnd_failed;                            \
        } while (0)
-#define HASHfnd_str_hv(x,y,z)                                          \
-       do {                                                            \
-               BUN _i;                                                 \
-               (x) = BUN_NONE;                                         \
-               if ((y).b->T->hash || BAThash((y).b, 0) == GDK_SUCCEED) { \
-                       HASHloop_str_hv((y), (y).b->T->hash, _i, (z)) { \
-                               (x) = _i;                               \
-                               break;                                  \
-                       }                                               \
-               } else                                                  \
-                       goto hashfnd_failed;                            \
-       } while (0)
 #define HASHfnd(x,y,z)                                                 \
        do {                                                            \
                BUN _i;                                                 \
@@ -211,18 +205,7 @@ gdk_export BUN HASHlist(Hash *h, BUN i);
 #ifdef HAVE_HGE
 #define HASHfnd_hge(x,y,z)     HASHfnd_TYPE(x,y,z,hge)
 #endif
-#define HASHfnd_oid(x,y,z)     HASHfnd_TYPE(x,y,z,oid)
-#define HASHfnd_wrd(x,y,z)     HASHfnd_TYPE(x,y,z,wrd)
 
-#if SIZEOF_VOID_P == SIZEOF_INT
-#define HASHfnd_ptr(x,y,z)     HASHfnd_int(x,y,z)
-#else /* SIZEOF_VOID_P == SIZEOF_LNG */
-#define HASHfnd_ptr(x,y,z)     HASHfnd_lng(x,y,z)
-#endif
-#define HASHfnd_bit(x,y,z)     HASHfnd_bte(x,y,z)
-#define HASHfnd_flt(x,y,z)     HASHfnd_int(x,y,z)
-#define HASHfnd_dbl(x,y,z)     HASHfnd_lng(x,y,z)
-#define HASHfnd_any(x,y,z)     HASHfnd(x,y,z)
 /*
  * A new entry is added with HASHins using the BAT, the BUN index, and
  * a pointer to the value to be stored.
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to