Changeset: 957c834b19e1 for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=957c834b19e1 Modified Files: gdk/gdk_hash.c gdk/gdk_hash.h Branch: leftmart Log Message:
tidying up diffs (102 lines): diff --git a/gdk/gdk_hash.c b/gdk/gdk_hash.c --- a/gdk/gdk_hash.c +++ b/gdk/gdk_hash.c @@ -267,8 +267,8 @@ BATcheckhash(BAT *b) b->T->hash = h; ALGODEBUG fprintf(stderr, "#BATcheckhash: reusing persisted hash %s\n", BATgetId(b)); MT_lock_unset(&GDKhashLock(abs(b->batCacheid))); - IDXACCESS fprintf(stderr, "[%4d->%4d]:%s (" BUNFMT ") #BATcheckhash: load persistent hash index (ms=" LLFMT - ")\n", b->batCacheid,-VIEWtparent(b), "type", BATcount(b), GDKusec() - t); + IDXACCESS fprintf(stderr, "[%d,%d]:%c (" BUNFMT ") #BATcheckhash: load persistent hash index (ms=" LLFMT + ")\n", b->batCacheid,-VIEWtparent(b), b->T->type, BATcount(b), GDKusec() - t); return 1; } GDKfree(h); @@ -532,7 +532,7 @@ BAThash(BAT *b, BUN masksize) ALGODEBUG HASHcollisions(b, b->T->hash); } MT_lock_unset(&GDKhashLock(abs(b->batCacheid))); - IDXACCESS fprintf(stderr, "[%4d->%4d]:%s (" BUNFMT ") #BAThash: create hash index (ms=" LLFMT ")\n", b->batCacheid,-VIEWtparent(b), "type", BATcount(b), t1 - t0); + IDXACCESS fprintf(stderr, "[%d,%d]:%c (" BUNFMT ") #BAThash: create hash index (ms=" LLFMT ")\n", b->batCacheid,-VIEWtparent(b), b->T->type, BATcount(b), t1 - t0); return GDK_SUCCEED; } diff --git a/gdk/gdk_hash.h b/gdk/gdk_hash.h --- a/gdk/gdk_hash.h +++ b/gdk/gdk_hash.h @@ -129,7 +129,7 @@ gdk_export BUN HASHlist(Hash *h, BUN i); #endif -/* FNV hash */ +/* FNV1a hash */ #if SIZEOF_BUN == 8 #define FNV_PRIME 0x100000001b3ULL @@ -142,16 +142,13 @@ gdk_export BUN HASHlist(Hash *h, BUN i); #define NO_FNV_OPT static inline BUN fnvhash_int(const void *v) { - unsigned int v_int = *(unsigned int *) v; + unsigned int v_uint = *(unsigned int *) v; BUN r = FNV_INIT; -#if SIZEOF_INT == 8 - int octets = 8; -#else - int octets = 4; -#endif + size_t octets = sizeof(unsigned int); + while (octets--) { - r ^= (v_int & 0xff); - v_int >>= 8; + r ^= (v_uint & 0xff); + v_uint >>= 8; #ifdef NO_FNV_OPT r *= FNV_PRIME; #else @@ -167,12 +164,13 @@ static inline BUN fnvhash_int(const void } static inline BUN fnvhash_lng(const void *v) { - ulng v_int = *(ulng *) v; + ulng v_ulng = *(ulng *) v; BUN r = FNV_INIT; - int octets = 8; + size_t octets = sizeof(ulng); + while (octets--) { - r ^= (v_int & 0xff); - v_int >>= 8; + r ^= (v_ulng & 0xff); + v_ulng >>= 8; #ifdef NO_FNV_OPT r *= FNV_PRIME; #else @@ -187,9 +185,11 @@ static inline BUN fnvhash_lng(const void return r; } -#define hash_int2(H,R) ((H)->n > 32 ? ((BUN) ((R) >> (H)->n) ^ ((R) & (H)->mask)) : ((BUN) ((((R) >> (H)->n) ^ (R)) & (H)->mask))) -#define hash_int(H,V) hash_int2(H, fnvhash_int(V)) -#define hash_lng(H,V) hash_int2(H, fnvhash_lng(V)) +#define fnv_mask(H,R) ((H)->n > 32 ? ((BUN) ((R) >> (H)->n) ^ ((R) & (H)->mask)) : ((BUN) ((((R) >> (H)->n) ^ (R)) & (H)->mask))) +#define fnv_int(H,V) fnv_mask(H, fnvhash_int(V)) +#define fnv_lng(H,V) fnv_mask(H, fnvhash_lng(V)) + +/* end of FNV1a hash */ #define mix_bte(X) ((unsigned int) (unsigned char) (X)) #define mix_sht(X) ((unsigned int) (unsigned short) (X)) @@ -208,9 +208,9 @@ static inline BUN fnvhash_lng(const void #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) 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)*/ +#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_lng(*(const ulng *) (V)) & (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_hge(*(const uhge *) (V)) & (H)->mask) #endif _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list