135 lines
4.1 KiB
Plaintext
135 lines
4.1 KiB
Plaintext
|
{{namespace_with_grace_begin __namespace}}
|
||
|
|
||
|
{{~if __this.comment != '' ~}}
|
||
|
/**
|
||
|
* {{escape_comment __this.comment}}
|
||
|
*/
|
||
|
{{~end~}}
|
||
|
|
||
|
class {{__name}}
|
||
|
{
|
||
|
{{~if __this.is_map_table ~}}
|
||
|
private:
|
||
|
::luban::HashMap<{{declaring_type_name __key_type}}, {{declaring_type_name __value_type}}> _dataMap;
|
||
|
::luban::Vector<{{declaring_type_name __value_type}}> _dataList;
|
||
|
|
||
|
public:
|
||
|
~{{__name}}()
|
||
|
{
|
||
|
for (auto& _v : _dataList)
|
||
|
{
|
||
|
LUBAN_FREE(_v);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
bool load(::luban::ByteBuf& _buf)
|
||
|
{
|
||
|
int n;
|
||
|
if (!_buf.readSize(n)) return false;
|
||
|
for(; n > 0 ; --n)
|
||
|
{
|
||
|
{{declaring_type_name __value_type}} _v;
|
||
|
{{deserialize '_buf' '_v' __value_type}}
|
||
|
_dataList.push_back(_v);
|
||
|
_dataMap[_v->{{format_field_name __code_style __this.index_field.name}}] = _v;
|
||
|
}
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
const ::luban::HashMap<{{declaring_type_name __key_type}}, {{declaring_type_name __value_type}}>& getDataMap() const { return _dataMap; }
|
||
|
const ::luban::Vector<{{declaring_type_name __value_type}}>& getDataList() const { return _dataList; }
|
||
|
|
||
|
{{declaring_type_name __value_type}} get({{declaring_type_name __key_type}} key)
|
||
|
{
|
||
|
auto it = _dataMap.find(key);
|
||
|
return it != _dataMap.end() ? it->second : nullptr;
|
||
|
}
|
||
|
|
||
|
{{~else if __this.is_list_table~}}
|
||
|
private:
|
||
|
::luban::Vector<{{declaring_type_name __value_type}}> _dataList;
|
||
|
{{~if __this.is_union_index~}}
|
||
|
|
||
|
{{~else if !__this.index_list.empty?~}}
|
||
|
{{~for idx in __this.index_list~}}
|
||
|
::luban::HashMap<{{declaring_type_name idx.type}}, {{declaring_type_name __value_type}}> _dataMap_{{idx.index_field.name}};
|
||
|
{{~end~}}
|
||
|
{{~else~}}
|
||
|
{{~end~}}
|
||
|
|
||
|
public:
|
||
|
bool load(::luban::ByteBuf& _buf)
|
||
|
{
|
||
|
int n;
|
||
|
if (!_buf.readSize(n)) return false;
|
||
|
for(; n > 0 ; --n)
|
||
|
{
|
||
|
{{declaring_type_name __value_type}} _v;
|
||
|
{{deserialize '_buf' '_v' __value_type}}
|
||
|
_dataList.push_back(_v);
|
||
|
{{~if __this.is_union_index~}}
|
||
|
|
||
|
{{~else if !__this.index_list.empty?~}}
|
||
|
{{~for idx in __this.index_list~}}
|
||
|
_dataMap_{{idx.index_field.name}}[_v->{{idx.index_field.name}}] = _v;
|
||
|
{{~end~}}
|
||
|
{{~else~}}
|
||
|
{{~end~}}
|
||
|
}
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
const ::luban::Vector<{{declaring_type_name __value_type}}>& getDataList() const { return _dataList; }
|
||
|
|
||
|
{{~if __this.is_union_index~}}
|
||
|
|
||
|
{{~else if !__this.index_list.empty?~}}
|
||
|
{{~for idx in __this.index_list~}}
|
||
|
::luban::HashMap<{{declaring_type_name idx.type}}, {{declaring_type_name __value_type}}>& getDataMapBy{{idx.index_field.name}}()
|
||
|
{
|
||
|
return _dataMap_{{idx.index_field.name}};
|
||
|
}
|
||
|
|
||
|
{{declaring_type_name __value_type}} getBy{{idx.index_field.name}}({{declaring_type_name idx.type}} key)
|
||
|
{
|
||
|
auto it = _dataMap_{{idx.index_field.name}}.find(key);
|
||
|
return it != _dataMap_{{idx.index_field.name}}.end() ? it->second : nullptr;
|
||
|
}
|
||
|
{{~end~}}
|
||
|
{{~else~}}
|
||
|
|
||
|
{{declaring_type_name __value_type}} get(size_t index) const
|
||
|
{
|
||
|
return _dataList[index];
|
||
|
}
|
||
|
{{~end~}}
|
||
|
{{~else~}}
|
||
|
private:
|
||
|
{{declaring_type_name __value_type}} _data;
|
||
|
|
||
|
public:
|
||
|
{{declaring_type_name __value_type}} data() const { return _data; }
|
||
|
|
||
|
bool load(::luban::ByteBuf& _buf)
|
||
|
{
|
||
|
int n;
|
||
|
if (!_buf.readSize(n)) return false;
|
||
|
if (n != 1) return false;
|
||
|
{{deserialize '_buf' '_data' __value_type}}
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
|
||
|
{{~ for field in __value_type.def_bean.hierarchy_export_fields ~}}
|
||
|
{{~if field.comment != '' ~}}
|
||
|
/**
|
||
|
* {{escape_comment field.comment}}
|
||
|
*/
|
||
|
{{~end~}}
|
||
|
{{declaring_type_name field.ctype}}& {{getter_name field.name}}() const { return _data->{{format_field_name __code_style field.name}}; }
|
||
|
{{~end~}}
|
||
|
{{~end~}}
|
||
|
};
|
||
|
|
||
|
{{namespace_with_grace_end __namespace}}
|