2025-06-04 05:02:57 +08:00

200 lines
4.7 KiB
Plaintext

ReusableTable = class("ReusableTable")
-- NOTE -->
-- Don't share reusable table(or array). It can only have one holder.
-- NOTE --<
if not ReusableTable.inited then
ReusableTable.pool = TablePool.new()
ReusableTable.inited = true
end
local TableCreator = TablePool.DefaultCreator
local ArrayClear = TableUtility.TableClear
local TableClear = TableUtility.TableClear
local pool = ReusableTable.pool
local arrayTag = pool:Init(1, 200)
local tableTag = pool:Init(2, 50)
local vector2Tag = pool:Init(3, 20)
local vector3Tag = pool:Init(4, 200)
local vector4Tag = pool:Init(5, 20)
local colorTag = pool:Init(6, 20)
local rolePartArrayTag = pool:Init(7, 100)
local rolePartTableTag = pool:Init(8, 200)
local quaternionTag = pool:Init(9, 20)
local searchTargetInfoTag = pool:Init(10, 100)
local innerTeleportInfoTag = pool:Init(11, 10)
local outterTeleportInfoTag = pool:Init(12, 10)
local protocolStatisticsTag = pool:Init(13, 100)
function ReusableTable.LogPools()
pool:Log()
end
function ReusableTable.CreateArray()
local t, newCreated = pool:RemoveOrCreateByTag(arrayTag, TableCreator)
if not newCreated then
ArrayClear(t)
end
return t, newCreated
end
function ReusableTable.DestroyArray(array)
pool:AddByTag(arrayTag, array)
end
function ReusableTable.DestroyAndClearArray(array)
if(array)then
ArrayClear(array)
end
pool:AddByTag(arrayTag, array)
end
function ReusableTable.CreateTable()
local t, newCreated = pool:RemoveOrCreateByTag(tableTag, TableCreator)
if not newCreated then
TableClear(t)
end
return t, newCreated
end
function ReusableTable.DestroyTable(t)
pool:AddByTag(tableTag, t)
end
function ReusableTable.DestroyAndClearTable(t)
if(t)then
TableClear(t)
end
pool:AddByTag(tableTag, t)
end
-- custom
function ReusableTable.CreateVector2()
local t, newCreated = pool:RemoveOrCreateByTag(vector2Tag, TableCreator)
-- if not newCreated then
-- ArrayClear(t)
-- end
return t, newCreated
end
function ReusableTable.DestroyVector2(v)
pool:AddByTag(vector2Tag, v)
end
function ReusableTable.CreateVector3()
local t, newCreated = pool:RemoveOrCreateByTag(vector3Tag, TableCreator)
-- if not newCreated then
-- ArrayClear(t)
-- end
return t, newCreated
end
function ReusableTable.DestroyVector3(v)
pool:AddByTag(vector3Tag, v)
end
function ReusableTable.CreateColor()
local t, newCreated = pool:RemoveOrCreateByTag(colorTag, TableCreator)
-- if not newCreated then
-- ArrayClear(t)
-- end
return t, newCreated
end
function ReusableTable.DestroyColor(v)
pool:AddByTag(colorTag, v)
end
function ReusableTable.CreateRolePartArray()
local t, newCreated = pool:RemoveOrCreateByTag(rolePartArrayTag, TableCreator)
-- if not newCreated then
-- ArrayClear(t)
-- end
return t, newCreated
end
function ReusableTable.DestroyRolePartArray(v)
pool:AddByTag(rolePartArrayTag, v)
end
function ReusableTable.CreateRolePartTable()
local t, newCreated = pool:RemoveOrCreateByTag(rolePartTableTag, TableCreator)
if not newCreated then
TableClear(t)
end
return t, newCreated
end
function ReusableTable.DestroyRolePartTable(v)
pool:AddByTag(rolePartTableTag, v)
end
function ReusableTable.CreateQuaternion()
local t, newCreated = pool:RemoveOrCreateByTag(quaternionTag, TableCreator)
-- if not newCreated then
-- ArrayClear(t)
-- end
return t, newCreated
end
function ReusableTable.DestroyQuaternion(v)
pool:AddByTag(quaternionTag, v)
end
function ReusableTable.CreateSearchTargetInfo()
local t, newCreated = pool:RemoveOrCreateByTag(searchTargetInfoTag, TableCreator)
-- if not newCreated then
-- ArrayClear(t)
-- end
return t, newCreated
end
function ReusableTable.DestroySearchTargetInfo(v)
v[1] = nil -- creature
pool:AddByTag(searchTargetInfoTag, v)
end
function ReusableTable.CreateInnerTeleportInfo()
local t, newCreated = pool:RemoveOrCreateByTag(innerTeleportInfoTag, TableCreator)
return t, newCreated
end
function ReusableTable.DestroyInnerTeleportInfo(v)
if nil ~= v.targetPos then
v.targetPos:Destroy()
end
if nil ~= v.epTargetPos then
v.epTargetPos:Destroy()
end
TableClear(v)
pool:AddByTag(innerTeleportInfoTag, v)
end
function ReusableTable.CreateOutterTeleportInfo()
local t, newCreated = pool:RemoveOrCreateByTag(outterTeleportInfoTag, TableCreator)
return t, newCreated
end
function ReusableTable.DestroyOutterTeleportInfo(v)
if nil ~= v.targetPos then
v.targetPos:Destroy()
end
TableClear(v)
pool:AddByTag(outterTeleportInfoTag, v)
end
function ReusableTable.CreateProtocolStatistics()
local t, newCreated = pool:RemoveOrCreateByTag(protocolStatisticsTag, TableCreator)
if not newCreated then
TableClear(t)
end
return t, newCreated
end
function ReusableTable.DestroyProtocolStatistics(t)
pool:AddByTag(protocolStatisticsTag, t)
end