using Bright.Serialization; using System.Collections.Generic; using SimpleJSON; {{ name = x.name key_type = x.key_ttype key_type1 = x.key_ttype1 key_type2 = x.key_ttype2 value_type = x.value_ttype }} namespace {{x.namespace_with_top_module}} { {{~if x.comment != '' ~}} /// /// {{x.escape_comment}} /// {{~end~}} public sealed partial class {{name}} { {{~if x.is_map_table ~}} private readonly Dictionary<{{cs_define_type key_type}}, {{cs_define_type value_type}}> _dataMap; private readonly List<{{cs_define_type value_type}}> _dataList; public {{name}}(JSONNode _json) { _dataMap = new Dictionary<{{cs_define_type key_type}}, {{cs_define_type value_type}}>(); _dataList = new List<{{cs_define_type value_type}}>(); foreach(JSONNode _row in _json.Children) { var _v = {{cs_define_type value_type}}.Deserialize{{value_type.bean.name}}(_row); _dataList.Add(_v); _dataMap.Add(_v.{{x.index_field.convention_name}}, _v); } PostInit(); } public Dictionary<{{cs_define_type key_type}}, {{cs_define_type value_type}}> DataMap => _dataMap; public List<{{cs_define_type value_type}}> DataList => _dataList; {{~if value_type.is_dynamic~}} public T GetOrDefaultAs({{cs_define_type key_type}} key) where T : {{cs_define_type value_type}} => _dataMap.TryGetValue(key, out var v) ? (T)v : null; public T GetAs({{cs_define_type key_type}} key) where T : {{cs_define_type value_type}} => (T)_dataMap[key]; {{~end~}} public {{cs_define_type value_type}} GetOrDefault({{cs_define_type key_type}} key) => _dataMap.TryGetValue(key, out var v) ? v : null; public {{cs_define_type value_type}} Get({{cs_define_type key_type}} key) => _dataMap[key]; public {{cs_define_type value_type}} this[{{cs_define_type key_type}} key] => _dataMap[key]; public void Resolve(Dictionary _tables) { foreach(var v in _dataList) { v.Resolve(_tables); } PostResolve(); } public void TranslateText(System.Func translator) { foreach(var v in _dataList) { v.TranslateText(translator); } } {{~else if x.is_list_table ~}} private readonly List<{{cs_define_type value_type}}> _dataList; {{~if x.is_union_index~}} private {{cs_table_union_map_type_name x}} _dataMapUnion; {{~else if !x.index_list.empty?~}} {{~for idx in x.index_list~}} private Dictionary<{{cs_define_type idx.type}}, {{cs_define_type value_type}}> _dataMap_{{idx.index_field.name}}; {{~end~}} {{~end~}} public {{name}}(JSONNode _json) { _dataList = new List<{{cs_define_type value_type}}>(); foreach(JSONNode _row in _json.Children) { var _v = {{cs_define_type value_type}}.Deserialize{{value_type.bean.name}}(_row); _dataList.Add(_v); } {{~if x.is_union_index~}} _dataMapUnion = new {{cs_table_union_map_type_name x}}(); foreach(var _v in _dataList) { _dataMapUnion.Add(({{cs_table_key_list x "_v"}}), _v); } {{~else if !x.index_list.empty?~}} {{~for idx in x.index_list~}} _dataMap_{{idx.index_field.name}} = new Dictionary<{{cs_define_type idx.type}}, {{cs_define_type value_type}}>(); {{~end~}} foreach(var _v in _dataList) { {{~for idx in x.index_list~}} _dataMap_{{idx.index_field.name}}.Add(_v.{{idx.index_field.convention_name}}, _v); {{~end~}} } {{~end~}} PostInit(); } public List<{{cs_define_type value_type}}> DataList => _dataList; {{~if x.is_union_index~}} public {{cs_define_type value_type}} Get({{cs_table_get_param_def_list x}}) => _dataMapUnion.TryGetValue(({{cs_table_get_param_name_list x}}), out {{cs_define_type value_type}} __v) ? __v : null; {{~else if !x.index_list.empty? ~}} {{~for idx in x.index_list~}} public {{cs_define_type value_type}} GetBy{{idx.index_field.convention_name}}({{cs_define_type idx.type}} key) => _dataMap_{{idx.index_field.name}}.TryGetValue(key, out {{cs_define_type value_type}} __v) ? __v : null; {{~end~}} {{~end~}} public void Resolve(Dictionary _tables) { foreach(var v in _dataList) { v.Resolve(_tables); } PostResolve(); } public void TranslateText(System.Func translator) { foreach(var v in _dataList) { v.TranslateText(translator); } } {{~else~}} private readonly {{cs_define_type value_type}} _data; public {{name}}(JSONNode _json) { if(!_json.IsArray) { throw new SerializationException(); } if (_json.Count != 1) throw new SerializationException("table mode=one, but size != 1"); _data = {{cs_define_type value_type}}.Deserialize{{value_type.bean.name}}(_json[0]); PostInit(); } {{~ for field in value_type.bean.hierarchy_export_fields ~}} {{~if field.comment != '' ~}} /// /// {{field.escape_comment}} /// {{~end~}} public {{cs_define_type field.ctype}} {{field.convention_name}} => _data.{{field.convention_name}}; {{~end~}} public void Resolve(Dictionary _tables) { _data.Resolve(_tables); PostResolve(); } public void TranslateText(System.Func translator) { _data.TranslateText(translator); } {{~end~}} partial void PostInit(); partial void PostResolve(); } }