AlicizaX/Config/Tools/Templates/cs-simple-json/table.sbn
陈思海 eb38f67131 init
2025-01-23 19:06:48 +08:00

203 lines
7.8 KiB
Plaintext

using LuBan.Runtime;
using GameFrameX.Config.Runtime;
using SimpleJSON;
{{
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}} : BaseDataTable<{{declaring_type_name __value_type}}>
{
private readonly System.Func<System.Threading.Tasks.Task<JSONNode>> _loadFunc;
public {{__name}}(System.Func<System.Threading.Tasks.Task<JSONNode>> loadFunc)
{{~if __table.is_map_table ~}}
{
_loadFunc = loadFunc;
}
public override async System.Threading.Tasks.Task LoadAsync()
{
var jsonNode = await _loadFunc();
StringDataMaps.Clear();
DataList.Clear();
foreach(var _ele in jsonNode.Children)
{
{{declaring_type_name __value_type}} _v;
{{deserialize '_v' '_ele' __value_type}}
DataList.Add(_v);
{{~if __key_type.type_name != 'string' ~}}
LongDataMaps.Add(_v.{{format_property_name __code_style __table.index_field.name}}, _v);
{{~end~}}
StringDataMaps.Add(_v.{{format_property_name __code_style __table.index_field.name}}.ToString(), _v);
}
PostInit();
}
{{~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 void ResolveRef({{__manager_name}} tables)
{
foreach(var value in DataList)
{
value.ResolveRef(tables);
}
}
public void TranslateText(System.Func<string, string, string> translator)
{
foreach(var v in DataList)
{
v.TranslateText(translator);
}
}
{{~else if __table.is_list_table ~}}
{{~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~}}
private readonly System.Func<System.Threading.Tasks.Task<JSONNode>> _loadFunc;
public {{__name}}(System.Func<System.Threading.Tasks.Task<JSONNode>> loadFunc)
{
_loadFunc = loadFunc;
{{~if __table.is_union_index~}}
_dataMapUnion = new {{table_union_map_type_name}}();
{{~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~}}
{{~end~}}
}
public override async System.Threading.Tasks.Task LoadAsync()
{
JSONNode _json = await _loadFunc();
DataList.Clear();
foreach(var _ele in _json.Children)
{
{{declaring_type_name __value_type}} _v;
{{deserialize '_v' '_ele' __value_type}}
DataList.Add(_v);
}
{{~if __table.is_union_index~}}
_dataMapUnion.Clear();
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}}.Clear();
{{~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~}}
PostInit();
}
//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)
{
foreach(var _v in DataList)
{
_v.ResolveRef(tables);
}
}
public void TranslateText(System.Func<string, string, string> translator)
{
foreach(var v in DataList)
{
v.TranslateText(translator);
}
}
{{~else~}}
private {{declaring_type_name __value_type}} _data;
public {{declaring_type_name __value_type}} Data => _data;
private readonly System.Func<System.Threading.Tasks.Task<JSONNode>> _loadFunc;
public {{__name}}(System.Func<System.Threading.Tasks.Task<JSONNode>> loadFunc)
{
_loadFunc = loadFunc;
}
public override async System.Threading.Tasks.Task LoadAsync()
{
JSONNode _json = await _loadFunc();
int n = _json.Count;
if (n != 1) throw new SerializationException("table mode=one, but size != 1");
{{deserialize '_data' '_json[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)
{
_data.ResolveRef(tables);
}
public void TranslateText(System.Func<string, string, string> translator)
{
_data.TranslateText(translator);
}
{{~end~}}
partial void PostInit();
}
{{namespace_with_grace_end __namespace_with_top_module}}