159 lines
4.8 KiB
Plaintext
159 lines
4.8 KiB
Plaintext
local setmetatable = setmetatable
|
|
local pairs = pairs
|
|
local ipairs = ipairs
|
|
local tinsert = table.insert
|
|
|
|
local function SimpleClass()
|
|
local class = {}
|
|
class.__index = class
|
|
class.New = function(...)
|
|
local ctor = class.ctor
|
|
local o = ctor and ctor(...) or {}
|
|
setmetatable(o, class)
|
|
return o
|
|
end
|
|
return class
|
|
end
|
|
|
|
|
|
local function get_map_size(m)
|
|
local n = 0
|
|
for _ in pairs(m) do
|
|
n = n + 1
|
|
end
|
|
return n
|
|
end
|
|
|
|
local enums =
|
|
{
|
|
{{~ for c in __enums ~}}
|
|
---@class {{c.full_name}} {{-if c.comment != ''}} @{{escape_comment c.comment}}{{end}}
|
|
{{~ for item in c.items ~}}
|
|
---@field public {{item.name}} integer {{-if item.comment != ''}} @{{escape_comment item.comment}}{{end}}
|
|
{{~end~}}
|
|
['{{c.full_name}}'] = { {{ for item in c.items }} {{item.name}}={{item.int_value}}, {{end}} };
|
|
{{~end~}}
|
|
}
|
|
|
|
local tables =
|
|
{
|
|
{{~for table in __tables ~}}
|
|
{{~if table.is_map_table ~}}
|
|
{ name='{{table.name}}', file='{{table.output_data_file}}', mode='map', index='{{table.index}}', value_type='{{table.value_ttype.def_bean.full_name}}' },
|
|
{{~else if table.is_list_table ~}}
|
|
{ name='{{table.name}}', file='{{table.output_data_file}}', mode='list', index='{{table.index}}', value_type='{{table.value_ttype.def_bean.full_name}}' },
|
|
{{~else~}}
|
|
{ name='{{table.name}}', file='{{table.output_data_file}}', mode='one', value_type='{{table.value_ttype.def_bean.full_name}}'},
|
|
{{~end~}}
|
|
{{~end~}}
|
|
}
|
|
|
|
local function InitTypes(methods)
|
|
local readBool = methods.readBool
|
|
local readByte = methods.readByte
|
|
local readShort = methods.readShort
|
|
local readFshort = methods.readFshort
|
|
local readInt = methods.readInt
|
|
local readFint = methods.readFint
|
|
local readLong = methods.readLong
|
|
local readFlong = methods.readFlong
|
|
local readFloat = methods.readFloat
|
|
local readDouble = methods.readDouble
|
|
local readSize = methods.readSize
|
|
|
|
local readString = methods.readString
|
|
|
|
local function readList(bs, keyFun)
|
|
local list = {}
|
|
local v
|
|
for i = 1, readSize(bs) do
|
|
tinsert(list, keyFun(bs))
|
|
end
|
|
return list
|
|
end
|
|
|
|
local readArray = readList
|
|
|
|
local function readSet(bs, keyFun)
|
|
local set = {}
|
|
local v
|
|
for i = 1, readSize(bs) do
|
|
tinsert(set, keyFun(bs))
|
|
end
|
|
return set
|
|
end
|
|
|
|
local function readMap(bs, keyFun, valueFun)
|
|
local map = {}
|
|
for i = 1, readSize(bs) do
|
|
local k = keyFun(bs)
|
|
local v = valueFun(bs)
|
|
map[k] = v
|
|
end
|
|
return map
|
|
end
|
|
|
|
local function readNullableBool(bs)
|
|
if readBool(bs) then
|
|
return readBool(bs)
|
|
end
|
|
end
|
|
|
|
local beans = {}
|
|
{{~ for bean in __beans ~}}
|
|
do
|
|
---@class {{bean.full_name}} {{if bean.parent_def_type}}:{{bean.parent}} {{end}} {{-if bean.comment != ''}} @{{escape_comment bean.comment}}{{end}}
|
|
{{~ for field in bean.export_fields~}}
|
|
---@field public {{field.name}} {{comment_type field.ctype}} {{-if field.comment != ''}} @{{escape_comment field.comment}}{{end}}
|
|
{{~end~}}
|
|
local class = {
|
|
{{~ for field in bean.export_fields~}}
|
|
{ name='{{field.name}}', type='{{comment_type field.ctype}}'},
|
|
{{~end~}}
|
|
}
|
|
beans['{{bean.full_name}}'] = class
|
|
end
|
|
{{~end~}}
|
|
|
|
local beans = {}
|
|
{{~ for bean in __beans ~}}
|
|
do
|
|
---@class {{bean.full_name}} {{if bean.parent_def_type}}:{{bean.parent}} {{end}}
|
|
{{~ for field in bean.export_fields~}}
|
|
---@field public {{field.name}} {{comment_type field.ctype}}
|
|
{{~end~}}
|
|
local class = SimpleClass()
|
|
class._id = {{bean.id}}
|
|
class._type_ = '{{bean.full_name}}'
|
|
local id2name = { {{for c in bean.hierarchy_not_abstract_children}} [{{c.id}}] = '{{c.full_name}}', {{end}} }
|
|
{{~if bean.is_abstract_type~}}
|
|
class._deserialize = function(bs)
|
|
local id = readInt(bs)
|
|
return beans[id2name[id]]._deserialize(bs)
|
|
end
|
|
{{~else~}}
|
|
class._deserialize = function(bs)
|
|
local o = {
|
|
{{~ for field in bean.hierarchy_export_fields ~}}
|
|
{{~if !(need_marshal_bool_prefix field.ctype)~}}
|
|
{{field.name}} = {{deserialize 'bs' field.ctype}},
|
|
{{~else~}}
|
|
{{field.name}} = {{if !field.ctype.is_bool}}readBool(bs) and {{deserialize 'bs' field.ctype}} or nil {{-else-}} readNullableBool(bs) {{-end-}},
|
|
{{~end~}}
|
|
{{~end~}}
|
|
}
|
|
setmetatable(o, class)
|
|
return o
|
|
end
|
|
{{~end~}}
|
|
beans[class._type_] = class
|
|
end
|
|
{{~end~}}
|
|
|
|
|
|
return { enums = enums, beans = beans, tables = tables }
|
|
end
|
|
|
|
return { InitTypes = InitTypes }
|
|
|