mirror of
https://github.com/BlackMATov/evolved.lua.git
synced 2026-01-06 03:21:18 +07:00
non-jit lua compatibility
This commit is contained in:
@@ -1,5 +1,3 @@
|
||||
local bit = require 'bit'
|
||||
|
||||
---@class evolved.idpools
|
||||
local idpools = {}
|
||||
|
||||
@@ -23,7 +21,9 @@ end
|
||||
---@return integer index
|
||||
---@return integer version
|
||||
function idpools.unpack_id(id)
|
||||
return bit.band(id, 0xFFFFF), bit.rshift(id, 20)
|
||||
local index = id % 0x100000
|
||||
local version = (id - index) / 0x100000
|
||||
return index, version
|
||||
end
|
||||
|
||||
---@param idpool evolved.idpool
|
||||
@@ -32,26 +32,30 @@ end
|
||||
function idpools.acquire_id(idpool)
|
||||
if idpool.available_index ~= 0 then
|
||||
local index = idpool.available_index
|
||||
local version = bit.band(idpool.acquired_ids[index], 0x7FF00000)
|
||||
idpool.available_index = bit.band(idpool.acquired_ids[index], 0xFFFFF)
|
||||
idpool.acquired_ids[index] = index + version
|
||||
return idpool.acquired_ids[index]
|
||||
local available_id = idpool.acquired_ids[index]
|
||||
idpool.available_index = available_id % 0x100000
|
||||
local version = available_id - idpool.available_index
|
||||
local acquired_id = index + version
|
||||
idpool.acquired_ids[index] = acquired_id
|
||||
return acquired_id
|
||||
end
|
||||
|
||||
if #idpool.acquired_ids == 0xFFFFF then
|
||||
error('id index overflow', 2)
|
||||
end
|
||||
|
||||
local index, version = #idpool.acquired_ids + 1, 0x100000
|
||||
idpool.acquired_ids[index] = index + version
|
||||
return idpool.acquired_ids[index]
|
||||
local index = #idpool.acquired_ids + 1
|
||||
local version = 0x100000
|
||||
local acquired_id = index + version
|
||||
idpool.acquired_ids[index] = acquired_id
|
||||
return acquired_id
|
||||
end
|
||||
|
||||
---@param idpool evolved.idpool
|
||||
---@param id integer
|
||||
function idpools.release_id(idpool, id)
|
||||
local index = bit.band(id, 0xFFFFF)
|
||||
local version = bit.band(id, 0x7FF00000)
|
||||
local index = id % 0x100000
|
||||
local version = id - index
|
||||
|
||||
if idpool.acquired_ids[index] ~= id then
|
||||
error('id is not acquired or already released', 2)
|
||||
@@ -70,7 +74,7 @@ end
|
||||
---@return boolean
|
||||
---@nodiscard
|
||||
function idpools.is_id_alive(idpool, id)
|
||||
local index = bit.band(id, 0xFFFFF)
|
||||
local index = id % 0x100000
|
||||
return idpool.acquired_ids[index] == id
|
||||
end
|
||||
|
||||
|
||||
Reference in New Issue
Block a user