初始化工程

This commit is contained in:
2025-07-15 15:33:35 +08:00
parent ead49da3e8
commit bbd78128d0
301 changed files with 23953 additions and 0 deletions

View File

@@ -0,0 +1,151 @@
using Luban;
using SimpleJSON;
{{
parent_def_type = __bean.parent_def_type
export_fields = __bean.export_fields
hierarchy_export_fields = __bean.hierarchy_export_fields
}}
{{namespace_with_grace_begin __namespace_with_top_module}}
{{~if __bean.comment != '' ~}}
/// <summary>
/// {{escape_comment __bean.comment}}
/// </summary>
{{~end~}}
{{~
func get_ref_name
ret (format_property_name __code_style $0.name) + '_Ref'
end
func get_index_var_name
ret (format_property_name __code_style $0.name) + '_Index'
end
func generate_resolve_field_ref
field = $0
fieldName = format_property_name __code_style field.name
refTable = get_ref_table field
if can_generate_ref field
tableName = format_property_name __code_style refTable.name
if field.is_nullable
ret (get_ref_name field) + ' = ' + fieldName + '!= null ? tables.' + tableName + '.GetOrDefault(' + (get_value_of_nullable_type field.ctype fieldName) + ') : null;'
else
ret (get_ref_name field) + ' = tables.' + tableName + '.GetOrDefault(' + fieldName + ');'
end
else if can_generate_collection_ref field
collection_ref_table = get_collection_ref_table field
tableName = format_property_name __code_style collection_ref_table.name
if field.ctype.type_name == 'list' || field.ctype.type_name == 'set'
line1 = (get_ref_name field) + ' = new ' + (declaring_collection_ref_name field.ctype) + '();' + '\n'
line2 = 'foreach (var _v in ' + fieldName + ') { ' + (get_ref_name field) + '.Add(tables.' + tableName + '.GetOrDefault(_v)); }' + '\n'
ret line1 + line2
else if field.ctype.type_name == 'array'
line1 = (get_ref_name field) + ' = new ' + (declaring_type_name collection_ref_table.value_ttype) + '[' + fieldName + '.Length];' + '\n'
line2 = 'for (int _i = 0; _i < ' + fieldName + '.Length; _i++) { ' + (get_ref_name field) + '[_i] = tables.' + tableName + '.GetOrDefault(' + fieldName + '[_i]); }' + '\n'
ret line1 + line2
else if field.ctype.type_name == 'map'
line1 = (get_ref_name field) + ' = new ' + (declaring_collection_ref_name field.ctype) + '();' + '\n'
line2 = 'foreach (var kvp in ' + fieldName + ') { ' + (get_ref_name field) + '.Add(kvp.Key, tables.' + tableName + '.GetOrDefault(kvp.Value)); }' + '\n'
ret line1 + line2
else
ret ''
end
else
if (is_field_bean_need_resolve_ref field)
ret fieldName + '?.ResolveRef(tables);'
else if (is_field_array_like_need_resolve_ref field)
ret 'foreach (var _e in ' + fieldName + ') { _e?.ResolveRef(tables); }'
else if (is_field_map_need_resolve_ref field)
ret 'foreach (var _e in ' + fieldName + '.Values) { _e?.ResolveRef(tables); }'
else
ret ''
end
end
end
~}}
{{~if __bean.is_value_type~}}
public partial struct {{__name}}
{{~else~}}
public {{class_modifier __bean}} partial class {{__name}} : {{if parent_def_type}}{{__bean.parent}}{{else}}Luban.BeanBase{{end}}
{{~end~}}
{
public {{__name}}(JSONNode _buf) {{if parent_def_type}} : base(_buf) {{end}}
{
{{~ for field in export_fields
fieldName = format_property_name __code_style field.name
~}}
{{deserialize_field fieldName '_buf' field.name field.ctype}}
{{~if can_generate_ref field~}}
{{get_ref_name field}} = null;
{{~end~}}
{{~if has_index field~}}
foreach(var _v in {{fieldName}})
{
{{get_index_var_name field}}.Add(_v.{{format_property_name __code_style (get_index_field field).name}}, _v);
}
{{~end~}}
{{~end~}}
}
public static {{__name}} Deserialize{{__name}}(JSONNode _buf)
{
{{~if __bean.is_abstract_type~}}
switch ((string)_buf["$type"])
{
{{~for child in __bean.hierarchy_not_abstract_children~}}
case "{{impl_data_type child __bean}}": return new {{child.full_name}}(_buf);
{{~end~}}
default: throw new SerializationException();
}
{{~else~}}
return new {{__bean.full_name}}(_buf);
{{~end~}}
}
{{~ for field in export_fields ~}}
{{~if field.comment != '' ~}}
/// <summary>
/// {{escape_comment field.comment}}
/// </summary>
{{~end~}}
public readonly {{declaring_type_name field.ctype}} {{format_property_name __code_style field.name}};
{{~if can_generate_ref field~}}
public {{declaring_type_name (get_ref_type field)}} {{get_ref_name field}};
{{~else if can_generate_collection_ref field~}}
public {{declaring_collection_ref_name field.ctype}} {{get_ref_name field}};
{{~end~}}
{{~if has_index field
indexMapType = get_index_map_type field
~}}
public readonly {{declaring_type_name indexMapType}} {{get_index_var_name field}} = new {{declaring_type_name indexMapType}}();
{{~end~}}
{{~end~}}
{{~if !__bean.is_abstract_type && !__bean.is_value_type~}}
public const int __ID__ = {{__bean.id}};
public override int GetTypeId() => __ID__;
{{~end~}}
public {{method_modifier __bean}} void ResolveRef({{__manager_name}} tables)
{
{{~if parent_def_type~}}
base.ResolveRef(tables);
{{~end~}}
{{~for field in export_fields~}}
{{~ line = generate_resolve_field_ref field ~}}
{{~ if line != ''~}}
{{line}}
{{~end~}}
{{~end~}}
}
public override string ToString()
{
return "{{full_name}}{ "
{{~for field in hierarchy_export_fields ~}}
+ "{{format_field_name __code_style field.name}}:" + {{to_pretty_string (format_property_name __code_style field.name) field.ctype}} + ","
{{~end~}}
+ "}";
}
}
{{namespace_with_grace_end __namespace_with_top_module}}

View File

@@ -0,0 +1,170 @@
using Luban;
using SimpleJSON;
{{
key_type = __table.key_ttype
value_type = __table.value_ttype
func index_type_name
ret (declaring_type_name $0.type)
end
func table_union_map_type_name
ret 'System.Collections.Generic.Dictionary<(' + (array.each __table.index_list @index_type_name | array.join ', ') + '), ' + (declaring_type_name __value_type) + '>'
end
func table_key_list
varName = $0
indexList = __table.index_list |array.each do; ret varName + '.' + (format_property_name __code_style $0.index_field.name); end;
ret array.join indexList ', '
end
func table_param_def_list
paramList = __table.index_list |array.each do; ret (declaring_type_name $0.type) + ' ' + $0.index_field.name; end
ret array.join paramList ', '
end
func table_param_name_list
paramList = __table.index_list |array.each do; ret $0.index_field.name; end
ret array.join paramList ', '
end
}}
{{namespace_with_grace_begin __namespace_with_top_module}}
{{~if __table.comment != '' ~}}
/// <summary>
/// {{escape_comment __table.comment}}
/// </summary>
{{~end~}}
public partial class {{__name}}
{
{{~if __table.is_map_table ~}}
private readonly System.Collections.Generic.Dictionary<{{declaring_type_name __key_type}}, {{declaring_type_name __value_type}}> _dataMap;
private readonly System.Collections.Generic.List<{{declaring_type_name __value_type}}> _dataList;
public {{__name}}(JSONNode _buf)
{
_dataMap = new System.Collections.Generic.Dictionary<{{declaring_type_name __key_type}}, {{declaring_type_name __value_type}}>();
_dataList = new System.Collections.Generic.List<{{declaring_type_name __value_type}}>();
foreach(JSONNode _ele in _buf.Children)
{
{{declaring_type_name __value_type}} _v;
{{deserialize '_v' '_ele' __value_type}}
_dataList.Add(_v);
_dataMap.Add(_v.{{format_property_name __code_style __table.index_field.name}}, _v);
}
}
public System.Collections.Generic.Dictionary<{{declaring_type_name __key_type}}, {{declaring_type_name __value_type}}> DataMap => _dataMap;
public System.Collections.Generic.List<{{declaring_type_name __value_type}}> DataList => _dataList;
{{~if __value_type.is_dynamic~}}
public T GetOrDefaultAs<T>({{declaring_type_name __key_type}} key) where T : {{declaring_type_name __value_type}} => _dataMap.TryGetValue(key, out var v) ? (T)v : null;
public T GetAs<T>({{declaring_type_name __key_type}} key) where T : {{declaring_type_name __value_type}} => (T)_dataMap[key];
{{~end~}}
public {{declaring_type_name __value_type}} GetOrDefault({{declaring_type_name __key_type}} key) => _dataMap.TryGetValue(key, out var v) ? v : null;
public {{declaring_type_name __value_type}} Get({{declaring_type_name __key_type}} key) => _dataMap[key];
public {{declaring_type_name __value_type}} this[{{declaring_type_name __key_type}} key] => _dataMap[key];
public void ResolveRef({{__manager_name}} tables)
{
{{~if is_bean_need_resolve_ref value_type ~}}
foreach(var _v in _dataList)
{
_v.ResolveRef(tables);
}
{{~end~}}
}
{{~else if __table.is_list_table ~}}
private readonly System.Collections.Generic.List<{{declaring_type_name __value_type}}> _dataList;
{{~if __table.is_union_index~}}
private {{table_union_map_type_name}} _dataMapUnion;
{{~else if !__table.index_list.empty?~}}
{{~for idx in __table.index_list~}}
private System.Collections.Generic.Dictionary<{{declaring_type_name idx.type}}, {{declaring_type_name __value_type}}> _dataMap_{{idx.index_field.name}};
{{~end~}}
{{~end~}}
public {{__name}}(JSONNode _buf)
{
_dataList = new System.Collections.Generic.List<{{declaring_type_name __value_type}}>();
foreach(JSONNode _ele in _buf.Children)
{
{{declaring_type_name __value_type}} _v;
{{deserialize '_v' '_ele' __value_type}}
_dataList.Add(_v);
}
{{~if __table.is_union_index~}}
_dataMapUnion = new {{table_union_map_type_name}}();
foreach(var _v in _dataList)
{
_dataMapUnion.Add(({{table_key_list "_v"}}), _v);
}
{{~else if !__table.index_list.empty?~}}
{{~for idx in __table.index_list~}}
_dataMap_{{idx.index_field.name}} = new System.Collections.Generic.Dictionary<{{declaring_type_name idx.type}}, {{declaring_type_name __value_type}}>();
{{~end~}}
foreach(var _v in _dataList)
{
{{~for idx in __table.index_list~}}
_dataMap_{{idx.index_field.name}}.Add(_v.{{format_property_name __code_style idx.index_field.name}}, _v);
{{~end~}}
}
{{~end~}}
}
public System.Collections.Generic.List<{{declaring_type_name __value_type}}> DataList => _dataList;
{{~if __table.is_union_index~}}
public {{declaring_type_name __value_type}} Get({{table_param_def_list}}) => _dataMapUnion.TryGetValue(({{table_param_name_list}}), out {{declaring_type_name __value_type}} __v) ? __v : null;
{{~else if !__table.index_list.empty? ~}}
{{~for idx in __table.index_list~}}
public {{declaring_type_name __value_type}} GetBy{{format_property_name __code_style idx.index_field.name}}({{declaring_type_name idx.type}} key) => _dataMap_{{idx.index_field.name}}.TryGetValue(key, out {{declaring_type_name __value_type}} __v) ? __v : null;
{{~end~}}
{{~end~}}
public void ResolveRef({{__manager_name}} tables)
{
{{~if is_bean_need_resolve_ref value_type ~}}
foreach(var _v in _dataList)
{
_v.ResolveRef(tables);
}
{{~end~}}
}
{{~else~}}
private readonly {{declaring_type_name __value_type}} _data;
public {{declaring_type_name __value_type}} Data => _data;
public {{__name}}(JSONNode _buf)
{
int n = _buf.Count;
if (n != 1) throw new SerializationException("table mode=one, but size != 1");
{{deserialize '_data' '_buf[0]' __value_type}}
}
{{~ for field in __value_type.def_bean.hierarchy_export_fields ~}}
{{~if field.comment != '' ~}}
/// <summary>
/// {{escape_comment field.comment}}
/// </summary>
{{~end~}}
public {{declaring_type_name field.ctype}} {{format_property_name __code_style field.name}} => _data.{{format_property_name __code_style field.name}};
{{~end~}}
public void ResolveRef({{__manager_name}} tables)
{
{{~if is_bean_need_resolve_ref value_type ~}}
_data.ResolveRef(tables);
{{~end~}}
}
{{~end~}}
}
{{namespace_with_grace_end __namespace_with_top_module}}

View File

@@ -0,0 +1,32 @@
using Luban;
using SimpleJSON;
{{namespace_with_grace_begin __namespace}}
public partial class {{__name}}
{
{{~for table in __tables ~}}
{{~if table.comment != '' ~}}
/// <summary>
/// {{escape_comment table.comment}}
/// </summary>
{{~end~}}
public {{table.full_name}} {{format_property_name __code_style table.name}} {get; }
{{~end~}}
public {{__name}}(System.Func<string, JSONNode> loader)
{
{{~for table in __tables ~}}
{{format_property_name __code_style table.name}} = new {{table.full_name}}(loader("{{table.output_data_file}}"));
{{~end~}}
ResolveRef();
}
private void ResolveRef()
{
{{~for table in __tables ~}}
{{format_property_name __code_style table.name}}.ResolveRef(this);
{{~end~}}
}
}
{{namespace_with_grace_end __namespace}}