22#if defined(DUK_USE_STRHASH_DENSE)
24#define DUK__STRHASH_SHORTSTRING 4096L
25#define DUK__STRHASH_MEDIUMSTRING (256L * 1024L)
26#define DUK__STRHASH_BLOCKSIZE 256L
49 duk_uint32_t str_seed = heap->
hash_seed ^ ((duk_uint32_t) len);
51 if (len <= DUK__STRHASH_SHORTSTRING) {
52 hash = duk_util_hashbytes(str, len, str_seed);
57 if (len <= DUK__STRHASH_MEDIUMSTRING) {
58 skip = (
duk_size_t) (16 * DUK__STRHASH_BLOCKSIZE + DUK__STRHASH_BLOCKSIZE);
60 skip = (
duk_size_t) (256 * DUK__STRHASH_BLOCKSIZE + DUK__STRHASH_BLOCKSIZE);
63 hash = duk_util_hashbytes(str, (
duk_size_t) DUK__STRHASH_SHORTSTRING, str_seed);
64 off = DUK__STRHASH_SHORTSTRING + (skip * (hash % 256)) / 256;
70 hash ^= duk_util_hashbytes(str + off, now, str_seed);
75#if defined(DUK_USE_STRHASH16)
84#undef DUK__STRHASH_SHORTSTRING
85#undef DUK__STRHASH_MEDIUMSTRING
86#undef DUK__STRHASH_BLOCKSIZE
105 hash = heap->
hash_seed ^ ((duk_uint32_t) len);
107 for (off = len; off >= step; off -= step) {
109 hash = (hash * 33) + str[off - 1];
112#if defined(DUK_USE_STRHASH16)
116 hash &= 0x0000ffffUL;
#define DUK_USE_STRHASH_SKIP_SHIFT
DUK_INTERNAL duk_uint32_t duk_heap_hashstring(duk_heap *heap, const duk_uint8_t *str, duk_size_t len)