110 lines
2.4 KiB
Text
110 lines
2.4 KiB
Text
local function empty(container)
|
|
for i,j in pairs(container) do
|
|
return false
|
|
end
|
|
return true
|
|
end
|
|
|
|
class "object_collection"
|
|
function object_collection:__init()
|
|
self.m_free = {}
|
|
self.m_given = {}
|
|
self.m_count = 0
|
|
self.m_last_id = 0
|
|
end
|
|
function object_collection:get_id()
|
|
printf("get_id called [%s]", self.m_count)
|
|
|
|
self.m_count = self.m_count + 1
|
|
|
|
if (empty(self.m_free) == true) then
|
|
self.m_last_id = self.m_last_id + 1
|
|
self.m_given[self.m_last_id] = true
|
|
return self.m_last_id
|
|
end
|
|
|
|
for i,j in pairs(self.m_free) do
|
|
self.m_free[i] = nil
|
|
self.m_given[i] = true
|
|
return i
|
|
end
|
|
end
|
|
function object_collection:remove(id)
|
|
printf("remove called [%s]", tostring(id))
|
|
if self.m_given[id] == true then
|
|
self.m_given[id] = nil
|
|
self.m_free[id] = 1
|
|
self.m_count = self.m_count - 1
|
|
end
|
|
end
|
|
function object_collection:size()
|
|
return self.m_count
|
|
end
|
|
function object_collection:save(packet)
|
|
set_save_marker(packet, "save", false, "object_collection")
|
|
|
|
printf("SAVE OBJECT COLLECTION")
|
|
printf("------- m_count %s m_last_id %s", self.m_count, self.m_last_id)
|
|
printf("-------- m_free")
|
|
print_table(self.m_free)
|
|
printf("-------- m_given")
|
|
print_table(self.m_given)
|
|
printf("--------")
|
|
|
|
|
|
packet:w_u16(self.m_count)
|
|
packet:w_u16(self.m_last_id)
|
|
|
|
local n = 0
|
|
for k,v in pairs(self.m_free) do
|
|
n = n + 1
|
|
end
|
|
packet:w_u16(n)
|
|
for k,v in pairs(self.m_free) do
|
|
packet:w_u16(k)
|
|
end
|
|
|
|
n = 0
|
|
for k,v in pairs(self.m_given) do
|
|
n = n + 1
|
|
end
|
|
packet:w_u16(n)
|
|
for k,v in pairs(self.m_given) do
|
|
packet:w_u16(k)
|
|
end
|
|
|
|
set_save_marker(packet, "save", true, "object_collection")
|
|
end
|
|
function object_collection:load(packet)
|
|
set_save_marker(packet, "load", false, "object_collection")
|
|
|
|
printf("LOAD OBJECT COLLECTION")
|
|
callstack()
|
|
|
|
self.m_count = packet:r_u16()
|
|
self.m_last_id = packet:r_u16()
|
|
|
|
local n = packet:r_u16()
|
|
self.m_free = {}
|
|
for i = 1,n do
|
|
local id = packet:r_u16()
|
|
self.m_free[id] = 1
|
|
end
|
|
|
|
n = packet:r_u16()
|
|
self.m_given = {}
|
|
for i = 1,n do
|
|
local id = packet:r_u16()
|
|
self.m_given[id] = true
|
|
end
|
|
|
|
printf("------- m_count %s m_last_id %s", self.m_count, self.m_last_id)
|
|
printf("-------- m_free")
|
|
print_table(self.m_free)
|
|
printf("-------- m_given")
|
|
print_table(self.m_given)
|
|
printf("--------")
|
|
|
|
set_save_marker(packet, "load", true, "object_collection")
|
|
end
|
|
|