placed basic hash macros in qse/hash.h

This commit is contained in:
2019-03-05 08:21:01 +00:00
parent 1aea9f4492
commit bda9213f86
7 changed files with 131 additions and 84 deletions

View File

@ -25,6 +25,7 @@
*/
#include <qse/cmn/htb.h>
#include <qse/hash.h>
#include "mem-prv.h"
@ -735,25 +736,8 @@ pair_t* qse_htb_getnextpair (htb_t* htb, pair_t* pair, size_t* buckno)
size_t qse_htb_dflhash (const htb_t* htb, const void* kptr, size_t klen)
{
const byte_t* p = (const byte_t*)kptr;
const byte_t* bound = p + klen;
#if 0
/*size_t h = 2166136261;*/
/*size_t h = 0;*/
size_t h = 5381;
while (p < bound)
{
/*h = (h * 16777619) ^ *p++;*/
/*h = h * 31 + *p++;*/
h = ((h << 5) + h) + *p++;
}
#else
/* SDBM hash */
size_t h = 0;
while (p < bound) h = (h << 6) + (h << 16) - h + *p++;
#endif
size_t h;
QSE_HASH_BYTES (h, kptr, klen);
return h ;
}

View File

@ -281,10 +281,10 @@ qse_htl_t* qse_htl_open (qse_mmgr_t* mmgr, qse_size_t xtnsize, int keysize)
{
qse_htl_t* htl;
htl = QSE_MMGR_ALLOC (mmgr, QSE_SIZEOF(qse_htl_t) + xtnsize);
htl = QSE_MMGR_ALLOC(mmgr, QSE_SIZEOF(qse_htl_t) + xtnsize);
if (htl == QSE_NULL) return QSE_NULL;
if (qse_htl_init (htl, mmgr, keysize) <= -1)
if (qse_htl_init(htl, mmgr, keysize) <= -1)
{
QSE_MMGR_FREE (mmgr, htl);
return QSE_NULL;

View File

@ -1,4 +1,5 @@
#include <qse/cmn/oht.h>
#include <qse/hash.h>
#include "mem-prv.h"
#define DATA_PTR(oht,index) \
@ -6,19 +7,8 @@
static QSE_INLINE_ALWAYS qse_size_t default_hasher (qse_oht_t* oht, const void* data)
{
const qse_byte_t* p = (const qse_byte_t*)data;
const qse_byte_t* bound = p + oht->scale;
#if 0
// DJB2 hash
qse_size_t h = 5381;
while (p < bound) h = ((h << 5) + h) + *p++;
#else
// SDBM hash
qse_size_t h = 0;
while (p < bound) h = (h << 6) + (h << 16) - h + *p++;
#endif
qse_size_t h;
QSE_HASH_BYTES (h, data, oht->scale);
return h ;
}