2022-01-29 04:22:21 +01:00
|
|
|
|
2022-01-28 04:17:11 +01:00
|
|
|
type
|
|
|
|
NdString* = ptr object
|
2022-01-29 04:22:21 +01:00
|
|
|
len*: uint32
|
|
|
|
hash*: uint32
|
|
|
|
chars*: UncheckedArray[char]
|
2022-01-28 22:00:21 +01:00
|
|
|
|
|
|
|
proc free*(ndStr: var NdString) =
|
|
|
|
dealloc(ndStr)
|
|
|
|
|
2022-01-29 04:22:21 +01:00
|
|
|
# for hashtable:
|
|
|
|
|
|
|
|
proc fnv1a*(ndStr: NdString): int =
|
2022-01-28 22:00:21 +01:00
|
|
|
var hash = 2166136261'u32
|
|
|
|
for i in countup(0, ndStr.len.int - 1):
|
|
|
|
hash = hash xor (ndStr.chars[i]).uint32
|
|
|
|
hash *= 16777619
|
2022-01-29 04:22:21 +01:00
|
|
|
return hash.int
|
|
|
|
|
|
|
|
proc equal*(left, right: NdString): bool =
|
|
|
|
left == right
|