enhanced hash macros
This commit is contained in:
parent
0a405625ce
commit
a02ad5005f
@ -4,7 +4,7 @@ pkgincludedir = $(includedir)/qse
|
|||||||
|
|
||||||
pkginclude_HEADERS = \
|
pkginclude_HEADERS = \
|
||||||
conf-msw.h conf-os2.h conf-dos.h conf-vms.h conf-mac.h conf-inf.h \
|
conf-msw.h conf-os2.h conf-dos.h conf-vms.h conf-mac.h conf-inf.h \
|
||||||
types.h macros.h pack1.h unpack.h
|
types.h macros.h hash.h pack1.h unpack.h
|
||||||
|
|
||||||
if ENABLE_CXX
|
if ENABLE_CXX
|
||||||
pkginclude_HEADERS += \
|
pkginclude_HEADERS += \
|
||||||
|
@ -136,9 +136,9 @@ am__can_run_installinfo = \
|
|||||||
*) (install-info --version) >/dev/null 2>&1;; \
|
*) (install-info --version) >/dev/null 2>&1;; \
|
||||||
esac
|
esac
|
||||||
am__pkginclude_HEADERS_DIST = conf-msw.h conf-os2.h conf-dos.h \
|
am__pkginclude_HEADERS_DIST = conf-msw.h conf-os2.h conf-dos.h \
|
||||||
conf-vms.h conf-mac.h conf-inf.h types.h macros.h pack1.h \
|
conf-vms.h conf-mac.h conf-inf.h types.h macros.h hash.h \
|
||||||
unpack.h Types.hpp Growable.hpp Hashable.hpp Uncopyable.hpp \
|
pack1.h unpack.h Types.hpp Growable.hpp Hashable.hpp \
|
||||||
RefCounted.hpp Exception.hpp Cstr.hpp
|
Uncopyable.hpp RefCounted.hpp Exception.hpp Cstr.hpp
|
||||||
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
|
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
|
||||||
am__vpath_adj = case $$p in \
|
am__vpath_adj = case $$p in \
|
||||||
$(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
|
$(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
|
||||||
@ -382,7 +382,6 @@ pdfdir = @pdfdir@
|
|||||||
prefix = @prefix@
|
prefix = @prefix@
|
||||||
program_transform_name = @program_transform_name@
|
program_transform_name = @program_transform_name@
|
||||||
psdir = @psdir@
|
psdir = @psdir@
|
||||||
runstatedir = @runstatedir@
|
|
||||||
sbindir = @sbindir@
|
sbindir = @sbindir@
|
||||||
sharedstatedir = @sharedstatedir@
|
sharedstatedir = @sharedstatedir@
|
||||||
srcdir = @srcdir@
|
srcdir = @srcdir@
|
||||||
@ -393,7 +392,7 @@ top_builddir = @top_builddir@
|
|||||||
top_srcdir = @top_srcdir@
|
top_srcdir = @top_srcdir@
|
||||||
SUBDIRS = cmn cry si awk sed xli http rad dhcp sttp
|
SUBDIRS = cmn cry si awk sed xli http rad dhcp sttp
|
||||||
pkginclude_HEADERS = conf-msw.h conf-os2.h conf-dos.h conf-vms.h \
|
pkginclude_HEADERS = conf-msw.h conf-os2.h conf-dos.h conf-vms.h \
|
||||||
conf-mac.h conf-inf.h types.h macros.h pack1.h unpack.h \
|
conf-mac.h conf-inf.h types.h macros.h hash.h pack1.h unpack.h \
|
||||||
$(am__append_1)
|
$(am__append_1)
|
||||||
all: config.h
|
all: config.h
|
||||||
$(MAKE) $(AM_MAKEFLAGS) all-recursive
|
$(MAKE) $(AM_MAKEFLAGS) all-recursive
|
||||||
|
@ -30,13 +30,15 @@
|
|||||||
#include <qse/types.h>
|
#include <qse/types.h>
|
||||||
#include <qse/macros.h>
|
#include <qse/macros.h>
|
||||||
|
|
||||||
#if MOO_SIZEOF_SIZE_T == 4
|
#if (QSE_SIZEOF_SIZE_T == 4)
|
||||||
# define QSE_HASH_FNV_MAGIC_INIT (0x811c9dc5)
|
# define QSE_HASH_FNV_MAGIC_INIT (0x811c9dc5)
|
||||||
# define QSE_HASH_FNV_MAGIC_PRIME (0x01000193)
|
# define QSE_HASH_FNV_MAGIC_PRIME (0x01000193)
|
||||||
#elif MOO_SIZEOF_SIZE_T == 8
|
#elif (QSE_SIZEOF_SIZE_T == 8)
|
||||||
|
|
||||||
# define QSE_HASH_FNV_MAGIC_INIT (0xCBF29CE484222325)
|
# define QSE_HASH_FNV_MAGIC_INIT (0xCBF29CE484222325)
|
||||||
# define QSE_HASH_FNV_MAGIC_PRIME (0x100000001B3)
|
# define QSE_HASH_FNV_MAGIC_PRIME (0x100000001B3l)
|
||||||
#elif MOO_SIZEOF_SIZE_T == 16
|
|
||||||
|
#elif (QSE_SIZEOF_SIZE_T == 16)
|
||||||
# define QSE_HASH_FNV_MAGIC_INIT (0x6C62272E07BB014262B821756295C58D)
|
# define QSE_HASH_FNV_MAGIC_INIT (0x6C62272E07BB014262B821756295C58D)
|
||||||
# define QSE_HASH_FNV_MAGIC_PRIME (0x1000000000000000000013B)
|
# define QSE_HASH_FNV_MAGIC_PRIME (0x1000000000000000000013B)
|
||||||
#endif
|
#endif
|
||||||
@ -45,47 +47,56 @@
|
|||||||
/* FNV-1 hash */
|
/* FNV-1 hash */
|
||||||
# define QSE_HASH_INIT QSE_HASH_FNV_MAGIC_INIT
|
# define QSE_HASH_INIT QSE_HASH_FNV_MAGIC_INIT
|
||||||
# define QSE_HASH_VALUE(hv,v) (((hv) ^ (v)) * QSE_HASH_FNV_MAGIC_PRIME)
|
# define QSE_HASH_VALUE(hv,v) (((hv) ^ (v)) * QSE_HASH_FNV_MAGIC_PRIME)
|
||||||
|
|
||||||
#else
|
#else
|
||||||
/* SDBM hash */
|
/* SDBM hash */
|
||||||
# define QSE_HASH_INIT 0
|
# define QSE_HASH_INIT 0
|
||||||
# define QSE_HASH_VALUE(hv,v) (((hv) << 6) + ((hv) << 16) - (hv) + (v))
|
# define QSE_HASH_VALUE(hv,v) (((hv) << 6) + ((hv) << 16) - (hv) + (v))
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define QSE_HASH_VALUES(hv, ptr, len, type) do { \
|
#define QSE_HASH_VPTL(hv, ptr, len, type) do { \
|
||||||
hv = QSE_HASH_INIT; \
|
hv = QSE_HASH_INIT; \
|
||||||
QSE_HASH_MORE_VALUES (hv, ptr, len, type); \
|
QSE_HASH_MORE_VPTL (hv, ptr, len, type); \
|
||||||
} while(0)
|
} while(0)
|
||||||
|
|
||||||
#define QSE_HASH_MORE_VALUES(hv, ptr, len, type) do { \
|
#define QSE_HASH_MORE_VPTL(hv, ptr, len, type) do { \
|
||||||
type* p = (type*)(ptr); \
|
type* __qse_hash_more_values_p = (type*)(ptr); \
|
||||||
type* q = (type*)p + (len); \
|
type* __qse_hash_more_values_q = (type*)__qse_hash_more_values_p + (len); \
|
||||||
while (p < q) { hv = QSE_HASH_VALUE(hv, *p); p++; } \
|
while (__qse_hash_more_values_p < __qse_hash_more_values_q) \
|
||||||
|
{ \
|
||||||
|
hv = QSE_HASH_VALUE(hv, *__qse_hash_more_values_p); \
|
||||||
|
__qse_hash_more_values_p++; \
|
||||||
|
} \
|
||||||
} while(0)
|
} while(0)
|
||||||
|
|
||||||
#define QSE_HASH_VSTR(hv, ptr, type) do { \
|
#define QSE_HASH_VPTR(hv, ptr, type) do { \
|
||||||
hv = QSE_HASH_INIT; \
|
hv = QSE_HASH_INIT; \
|
||||||
QSE_HASH_MORE_VALUES (hv, ptr, type); \
|
QSE_HASH_MORE_VPTL (hv, ptr, type); \
|
||||||
} while(0)
|
} while(0)
|
||||||
|
|
||||||
#define QSE_HASH_MORE_VSTR(hv, ptr, type) do { \
|
#define QSE_HASH_MORE_VPTR(hv, ptr, type) do { \
|
||||||
type* p = (type*)(ptr); \
|
type* __qse_hash_more_values_p = (type*)(ptr); \
|
||||||
while (*p) { hv = QSE_HASH_VALUE(hv, *p); p++; } \
|
while (*__qse_hash_more_values_p) \
|
||||||
|
{ \
|
||||||
|
hv = QSE_HASH_VALUE(hv, *__qse_hash_more_values_p); \
|
||||||
|
__qse_hash_more_values_p++; \
|
||||||
|
} \
|
||||||
} while(0)
|
} while(0)
|
||||||
|
|
||||||
#define QSE_HASH_BYTES(hv, ptr, len) QSE_HASH_VALUES(hv, ptr, len, const qse_uint8_t)
|
#define QSE_HASH_BYTES(hv, ptr, len) QSE_HASH_VPTL(hv, ptr, len, const qse_uint8_t)
|
||||||
#define QSE_HASH_MORE_BYTES(hv, ptr, len) QSE_HASH_MORE_VALUES(hv, ptr, len, const qse_uint8_t)
|
#define QSE_HASH_MORE_BYTES(hv, ptr, len) QSE_HASH_MORE_VPTL(hv, ptr, len, const qse_uint8_t)
|
||||||
|
|
||||||
#define QSE_HASH_MCHARS(hv, ptr, len) QSE_HASH_VALUES(hv, ptr, len, const qse_mchar_t)
|
#define QSE_HASH_MCHARS(hv, ptr, len) QSE_HASH_VPTL(hv, ptr, len, const qse_mchar_t)
|
||||||
#define QSE_HASH_MORE_MCHARS(hv, ptr, len) QSE_HASH_MORE_VALUES(hv, ptr, len, const qse_mchar_t)
|
#define QSE_HASH_MORE_MCHARS(hv, ptr, len) QSE_HASH_MORE_VPTL(hv, ptr, len, const qse_mchar_t)
|
||||||
|
|
||||||
#define QSE_HASH_WCHARS(hv, ptr, len) QSE_HASH_VALUES(hv, ptr, len, const qse_wchar_t)
|
#define QSE_HASH_WCHARS(hv, ptr, len) QSE_HASH_VPTL(hv, ptr, len, const qse_wchar_t)
|
||||||
#define QSE_HASH_MORE_WCHARS(hv, ptr, len) QSE_HASH_MORE_VALUES(hv, ptr, len, const qse_wchar_t)
|
#define QSE_HASH_MORE_WCHARS(hv, ptr, len) QSE_HASH_MORE_VPTL(hv, ptr, len, const qse_wchar_t)
|
||||||
|
|
||||||
#define QSE_HASH_MBS(hv, ptr) QSE_HASH_VSTR(hv, ptr, const qse_mchar_t)
|
#define QSE_HASH_MBS(hv, ptr) QSE_HASH_VPTR(hv, ptr, const qse_mchar_t)
|
||||||
#define QSE_HASH_MORE_MBS(hv, ptr) QSE_HASH_MORE_VSTR(hv, ptr, const qse_mchar_t)
|
#define QSE_HASH_MORE_MBS(hv, ptr) QSE_HASH_MORE_VPTR(hv, ptr, const qse_mchar_t)
|
||||||
|
|
||||||
#define QSE_HASH_WCS(hv, ptr) QSE_HASH_VSTR(hv, ptr, const qse_wchar_t)
|
#define QSE_HASH_WCS(hv, ptr) QSE_HASH_VPTR(hv, ptr, const qse_wchar_t)
|
||||||
#define QSE_HASH_MORE_WCS(hv, ptr) QSE_HASH_MORE_VSTR(hv, ptr, const qse_wchar_t)
|
#define QSE_HASH_MORE_WCS(hv, ptr) QSE_HASH_MORE_VPTR(hv, ptr, const qse_wchar_t)
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -864,7 +864,6 @@ qse_uint32_t qse_mbshash32 (const qse_mchar_t* p)
|
|||||||
|
|
||||||
qse_uint32_t qse_wcshash32 (const qse_wchar_t* p)
|
qse_uint32_t qse_wcshash32 (const qse_wchar_t* p)
|
||||||
{
|
{
|
||||||
|
|
||||||
qse_uint32_t hash = FNV_MAGIC_INIT;
|
qse_uint32_t hash = FNV_MAGIC_INIT;
|
||||||
|
|
||||||
while (*p)
|
while (*p)
|
||||||
@ -908,7 +907,7 @@ qse_uint32_t qse_wcscasehash32 (const qse_wchar_t* p)
|
|||||||
hash ^= (qse_uint32_t)(wc);
|
hash ^= (qse_uint32_t)(wc);
|
||||||
hash *= FNV_MAGIC_PRIME;
|
hash *= FNV_MAGIC_PRIME;
|
||||||
#else
|
#else
|
||||||
hash = qse_genhash_update (&wc, QSE_SIZEOF(wc), hash);
|
hash = qse_genhash_update(&wc, QSE_SIZEOF(wc), hash);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user