| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158 |
- 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 }
|