table.sbn 6.6 KB

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