diff options
author | Felix Krause <contact@flyx.org> | 2016-11-18 23:42:15 +0100 |
---|---|---|
committer | Felix Krause <contact@flyx.org> | 2016-11-18 23:42:15 +0100 |
commit | 93a998204c62ce473e125f059250f4a64a10ce0a (patch) | |
tree | 73e02805fac1c93d4262c8b83ddb1a310be71bf4 /lib/pure/collections/tableimpl.nim | |
parent | 7c1b5b3c2ba0e76c55cd3ea34dd1ac5beea1af42 (diff) | |
download | Nim-93a998204c62ce473e125f059250f4a64a10ce0a.tar.gz |
Fixes #5035
Diffstat (limited to 'lib/pure/collections/tableimpl.nim')
-rw-r--r-- | lib/pure/collections/tableimpl.nim | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/lib/pure/collections/tableimpl.nim b/lib/pure/collections/tableimpl.nim index a3dfd43a1..674fdddd2 100644 --- a/lib/pure/collections/tableimpl.nim +++ b/lib/pure/collections/tableimpl.nim @@ -39,16 +39,22 @@ template rawGetKnownHCImpl() {.dirty.} = h = nextTry(h, maxHash(t)) result = -1 - h # < 0 => MISSING; insert idx = -1 - result -template rawGetImpl() {.dirty.} = +template genHashImpl(key, hc: typed) = hc = hash(key) if hc == 0: # This almost never taken branch should be very predictable. hc = 314159265 # Value doesn't matter; Any non-zero favorite is fine. + +template genHash(key: typed): Hash = + var res: Hash + genHashImpl(key, res) + res + +template rawGetImpl() {.dirty.} = + genHashImpl(key, hc) rawGetKnownHCImpl() template rawGetDeepImpl() {.dirty.} = # Search algo for unconditional add - hc = hash(key) - if hc == 0: - hc = 314159265 + genHashImpl(key, hc) var h: Hash = hc and maxHash(t) while isFilled(t.data[h].hcode): h = nextTry(h, maxHash(t)) |