table.sbn 4.7 KB

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