mirror of
https://github.com/imezx/Warp.git
synced 2026-03-18 00:44:16 +00:00
rewrite(phase4): didnt think if global exists lol
This commit is contained in:
parent
4af26f4d41
commit
81d3c540c1
1 changed files with 20 additions and 25 deletions
|
|
@ -1,30 +1,25 @@
|
||||||
--!optimize 2
|
--!optimize 2
|
||||||
--!native
|
|
||||||
--@EternityDev
|
--@EternityDev
|
||||||
local BITS: number = 16
|
local BITS: number = 8
|
||||||
local MAX_VALUE: number = bit32.lshift(1, BITS) - 1
|
local MAX_VALUE: number = bit32.lshift(1, BITS) - 1
|
||||||
|
|
||||||
local cache: { [string]: number } = {}
|
if not shared.__identifier_registry then
|
||||||
local hash: number = game.PlaceVersion + 5381
|
shared.__identifier_registry = {
|
||||||
local count: number = 0
|
cache = {} :: { [string]: number },
|
||||||
|
counter = 0,
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
local registry = shared.__identifier_registry
|
||||||
return function(name: string): number
|
return function(name: string): number
|
||||||
local cached = cache[name]
|
local cached = registry.cache[name]
|
||||||
if cached then
|
if cached then
|
||||||
return cached
|
return cached
|
||||||
end
|
end
|
||||||
if count >= 255 then -- 255 is safer from collision
|
|
||||||
warn("ran out of ids :(")
|
|
||||||
return 0
|
|
||||||
end
|
|
||||||
|
|
||||||
local b: number = hash
|
local id = registry.counter + 1
|
||||||
for i = 1, #name do
|
assert(id <= MAX_VALUE, `Identifier overflow: exceeded {MAX_VALUE + 1} unique names.`)
|
||||||
b = bit32.bxor(bit32.lshift(b, 5) + b, string.byte(name, i))
|
registry.counter = id + 1
|
||||||
end
|
registry.cache[name] = id
|
||||||
|
return id
|
||||||
local reduced = bit32.band(b, MAX_VALUE)
|
|
||||||
cache[name] = reduced
|
|
||||||
count += 1
|
|
||||||
return reduced
|
|
||||||
end
|
end
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue