table.sbn 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. using Luban;
  2. using SimpleJSON;
  3. {{
  4. key_type = __table.key_ttype
  5. value_type = __table.value_ttype
  6. func index_type_name
  7. ret (declaring_type_name $0.type)
  8. end
  9. func table_union_map_type_name
  10. ret 'System.Collections.Generic.Dictionary<(' + (array.each __table.index_list @index_type_name | array.join ', ') + '), ' + (declaring_type_name __value_type) + '>'
  11. end
  12. func table_key_list
  13. varName = $0
  14. indexList = __table.index_list |array.each do; ret varName + '.' + (format_property_name __code_style $0.index_field.name); end;
  15. ret array.join indexList ', '
  16. end
  17. func table_param_def_list
  18. paramList = __table.index_list |array.each do; ret (declaring_type_name $0.type) + ' ' + $0.index_field.name; end
  19. ret array.join paramList ', '
  20. end
  21. func table_param_name_list
  22. paramList = __table.index_list |array.each do; ret $0.index_field.name; end
  23. ret array.join paramList ', '
  24. end
  25. }}
  26. {{namespace_with_grace_begin __namespace_with_top_module}}
  27. {{~if __table.comment != '' ~}}
  28. /// <summary>
  29. /// {{escape_comment __table.comment}}
  30. /// </summary>
  31. {{~end~}}
  32. public partial class {{__name}}
  33. {
  34. {{~if __table.is_map_table ~}}
  35. private readonly System.Collections.Generic.Dictionary<{{declaring_type_name __key_type}}, {{declaring_type_name __value_type}}> _dataMap;
  36. private readonly System.Collections.Generic.List<{{declaring_type_name __value_type}}> _dataList;
  37. public {{__name}}(JSONNode _buf)
  38. {
  39. int count = _buf.Count;
  40. _dataMap = new System.Collections.Generic.Dictionary<{{declaring_type_name __key_type}}, {{declaring_type_name __value_type}}>(count);
  41. _dataList = new System.Collections.Generic.List<{{declaring_type_name __value_type}}>(count);
  42. foreach(JSONNode _ele in _buf.Children)
  43. {
  44. {{declaring_type_name __value_type}} _v;
  45. {{deserialize '_v' '_ele' __value_type}}
  46. _dataList.Add(_v);
  47. _dataMap.Add(_v.{{format_property_name __code_style __table.index_field.name}}, _v);
  48. }
  49. }
  50. public System.Collections.Generic.Dictionary<{{declaring_type_name __key_type}}, {{declaring_type_name __value_type}}> DataMap => _dataMap;
  51. public System.Collections.Generic.List<{{declaring_type_name __value_type}}> DataList => _dataList;
  52. {{~if __value_type.is_dynamic~}}
  53. 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 : default;
  54. public T GetAs<T>({{declaring_type_name __key_type}} key) where T : {{declaring_type_name __value_type}} => (T)_dataMap[key];
  55. {{~end~}}
  56. public {{declaring_type_name __value_type}} GetOrDefault({{declaring_type_name __key_type}} key) => _dataMap.TryGetValue(key, out var v) ? v : default;
  57. public {{declaring_type_name __value_type}} Get({{declaring_type_name __key_type}} key) => _dataMap[key];
  58. public {{declaring_type_name __value_type}} this[{{declaring_type_name __key_type}} key] => _dataMap[key];
  59. public void ResolveRef({{__manager_name}} tables)
  60. {
  61. {{~if is_bean_need_resolve_ref value_type ~}}
  62. foreach(var _v in _dataList)
  63. {
  64. _v.ResolveRef(tables);
  65. }
  66. {{~end~}}
  67. }
  68. {{~else if __table.is_list_table ~}}
  69. private readonly System.Collections.Generic.List<{{declaring_type_name __value_type}}> _dataList;
  70. {{~if __table.is_union_index~}}
  71. private {{table_union_map_type_name}} _dataMapUnion;
  72. {{~else if !__table.index_list.empty?~}}
  73. {{~for idx in __table.index_list~}}
  74. private System.Collections.Generic.Dictionary<{{declaring_type_name idx.type}}, {{declaring_type_name __value_type}}> _dataMap_{{idx.index_field.name}};
  75. {{~end~}}
  76. {{~end~}}
  77. public {{__name}}(JSONNode _buf)
  78. {
  79. int count = _buf.Count;
  80. _dataList = new System.Collections.Generic.List<{{declaring_type_name __value_type}}>(count);
  81. foreach(JSONNode _ele in _buf.Children)
  82. {
  83. {{declaring_type_name __value_type}} _v;
  84. {{deserialize '_v' '_ele' __value_type}}
  85. _dataList.Add(_v);
  86. }
  87. {{~if __table.is_union_index~}}
  88. _dataMapUnion = new {{table_union_map_type_name}}();
  89. foreach(var _v in _dataList)
  90. {
  91. _dataMapUnion.Add(({{table_key_list "_v"}}), _v);
  92. }
  93. {{~else if !__table.index_list.empty?~}}
  94. {{~for idx in __table.index_list~}}
  95. _dataMap_{{idx.index_field.name}} = new System.Collections.Generic.Dictionary<{{declaring_type_name idx.type}}, {{declaring_type_name __value_type}}>(count);
  96. {{~end~}}
  97. foreach(var _v in _dataList)
  98. {
  99. {{~for idx in __table.index_list~}}
  100. _dataMap_{{idx.index_field.name}}.Add(_v.{{format_property_name __code_style idx.index_field.name}}, _v);
  101. {{~end~}}
  102. }
  103. {{~end~}}
  104. }
  105. public System.Collections.Generic.List<{{declaring_type_name __value_type}}> DataList => _dataList;
  106. {{~if __table.is_union_index~}}
  107. 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 : default;
  108. {{~else if !__table.index_list.empty? ~}}
  109. {{~for idx in __table.index_list~}}
  110. 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 : default;
  111. {{~end~}}
  112. {{~end~}}
  113. public void ResolveRef({{__manager_name}} tables)
  114. {
  115. {{~if is_bean_need_resolve_ref value_type ~}}
  116. foreach(var _v in _dataList)
  117. {
  118. _v.ResolveRef(tables);
  119. }
  120. {{~end~}}
  121. }
  122. {{~else~}}
  123. private readonly {{declaring_type_name __value_type}} _data;
  124. public {{declaring_type_name __value_type}} Data => _data;
  125. public {{__name}}(JSONNode _buf)
  126. {
  127. int n = _buf.Count;
  128. if (n != 1) throw new SerializationException("table mode=one, but size != 1");
  129. {{deserialize '_data' '_buf[0]' __value_type}}
  130. }
  131. {{~ for field in __value_type.def_bean.hierarchy_export_fields ~}}
  132. {{~if field.comment != '' ~}}
  133. /// <summary>
  134. /// {{escape_comment field.comment}}
  135. /// </summary>
  136. {{~end~}}
  137. public {{declaring_type_name field.ctype}} {{format_property_name __code_style field.name}} => _data.{{format_property_name __code_style field.name}};
  138. {{~end~}}
  139. public void ResolveRef({{__manager_name}} tables)
  140. {
  141. {{~if is_bean_need_resolve_ref value_type ~}}
  142. _data.ResolveRef(tables);
  143. {{~end~}}
  144. }
  145. {{~end~}}
  146. }
  147. {{namespace_with_grace_end __namespace_with_top_module}}