200 lines
4.7 KiB
Plaintext
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 |