table.sbn 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. {{namespace_with_grace_begin __namespace}}
  2. {{~if __this.comment != '' ~}}
  3. /**
  4. * {{escape_comment __this.comment}}
  5. */
  6. {{~end~}}
  7. class {{__name}}
  8. {
  9. {{~if __this.is_map_table ~}}
  10. private:
  11. ::luban::HashMap<{{declaring_type_name __key_type}}, {{declaring_type_name __value_type}}> _dataMap;
  12. ::luban::Vector<{{declaring_type_name __value_type}}> _dataList;
  13. public:
  14. ~{{__name}}()
  15. {
  16. for (auto& _v : _dataList)
  17. {
  18. LUBAN_FREE(_v);
  19. }
  20. }
  21. bool load(::luban::ByteBuf& _buf)
  22. {
  23. int n;
  24. if (!_buf.readSize(n)) return false;
  25. for(; n > 0 ; --n)
  26. {
  27. {{declaring_type_name __value_type}} _v;
  28. {{deserialize '_buf' '_v' __value_type}}
  29. _dataList.push_back(_v);
  30. _dataMap[_v->{{format_field_name __code_style __this.index_field.name}}] = _v;
  31. }
  32. return true;
  33. }
  34. const ::luban::HashMap<{{declaring_type_name __key_type}}, {{declaring_type_name __value_type}}>& getDataMap() const { return _dataMap; }
  35. const ::luban::Vector<{{declaring_type_name __value_type}}>& getDataList() const { return _dataList; }
  36. {{declaring_type_name __value_type}} get({{declaring_type_name __key_type}} key)
  37. {
  38. auto it = _dataMap.find(key);
  39. return it != _dataMap.end() ? it->second : nullptr;
  40. }
  41. {{~else if __this.is_list_table~}}
  42. private:
  43. ::luban::Vector<{{declaring_type_name __value_type}}> _dataList;
  44. {{~if __this.is_union_index~}}
  45. {{~else if !__this.index_list.empty?~}}
  46. {{~for idx in __this.index_list~}}
  47. ::luban::HashMap<{{declaring_type_name idx.type}}, {{declaring_type_name __value_type}}> _dataMap_{{idx.index_field.name}};
  48. {{~end~}}
  49. {{~else~}}
  50. {{~end~}}
  51. public:
  52. bool load(::luban::ByteBuf& _buf)
  53. {
  54. int n;
  55. if (!_buf.readSize(n)) return false;
  56. for(; n > 0 ; --n)
  57. {
  58. {{declaring_type_name __value_type}} _v;
  59. {{deserialize '_buf' '_v' __value_type}}
  60. _dataList.push_back(_v);
  61. {{~if __this.is_union_index~}}
  62. {{~else if !__this.index_list.empty?~}}
  63. {{~for idx in __this.index_list~}}
  64. _dataMap_{{idx.index_field.name}}[_v->{{idx.index_field.name}}] = _v;
  65. {{~end~}}
  66. {{~else~}}
  67. {{~end~}}
  68. }
  69. return true;
  70. }
  71. const ::luban::Vector<{{declaring_type_name __value_type}}>& getDataList() const { return _dataList; }
  72. {{~if __this.is_union_index~}}
  73. {{~else if !__this.index_list.empty?~}}
  74. {{~for idx in __this.index_list~}}
  75. ::luban::HashMap<{{declaring_type_name idx.type}}, {{declaring_type_name __value_type}}>& getDataMapBy{{idx.index_field.name}}()
  76. {
  77. return _dataMap_{{idx.index_field.name}};
  78. }
  79. {{declaring_type_name __value_type}} getBy{{idx.index_field.name}}({{declaring_type_name idx.type}} key)
  80. {
  81. auto it = _dataMap_{{idx.index_field.name}}.find(key);
  82. return it != _dataMap_{{idx.index_field.name}}.end() ? it->second : nullptr;
  83. }
  84. {{~end~}}
  85. {{~else~}}
  86. {{declaring_type_name __value_type}} get(size_t index) const
  87. {
  88. return _dataList[index];
  89. }
  90. {{~end~}}
  91. {{~else~}}
  92. private:
  93. {{declaring_type_name __value_type}} _data;
  94. public:
  95. {{declaring_type_name __value_type}} data() const { return _data; }
  96. bool load(::luban::ByteBuf& _buf)
  97. {
  98. int n;
  99. if (!_buf.readSize(n)) return false;
  100. if (n != 1) return false;
  101. {{deserialize '_buf' '_data' __value_type}}
  102. return true;
  103. }
  104. {{~ for field in __value_type.def_bean.hierarchy_export_fields ~}}
  105. {{~if field.comment != '' ~}}
  106. /**
  107. * {{escape_comment field.comment}}
  108. */
  109. {{~end~}}
  110. {{declaring_type_name field.ctype}}& {{getter_name field.name}}() const { return _data->{{format_field_name __code_style field.name}}; }
  111. {{~end~}}
  112. {{~end~}}
  113. };
  114. {{namespace_with_grace_end __namespace}}