parent
699b5a167a
commit
a39339bd51
|
|
@ -13,6 +13,39 @@
|
||||||
* {{x.escape_comment}}
|
* {{x.escape_comment}}
|
||||||
*/
|
*/
|
||||||
{{~end~}}
|
{{~end~}}
|
||||||
|
|
||||||
|
{{~if x.is_list_table ~}}
|
||||||
|
{{~if x.is_union_index~}}
|
||||||
|
typedef struct t_{{name}}_MultiKey
|
||||||
|
{
|
||||||
|
{{~for idx in x.index_list~}}
|
||||||
|
{{cpp_define_type idx.type}} {{idx.index_field.name}};
|
||||||
|
{{~end~}}
|
||||||
|
bool operator==(const t_{{name}}_MultiKey& stOther) const
|
||||||
|
{
|
||||||
|
bool bEqual = true;
|
||||||
|
{{~for idx in x.index_list~}}
|
||||||
|
bEqual = bEqual && (stOther.{{idx.index_field.name}} == {{idx.index_field.name}});
|
||||||
|
{{~end~}}
|
||||||
|
return bEqual;
|
||||||
|
}
|
||||||
|
}t_{{name}}_MultiKey;
|
||||||
|
|
||||||
|
typedef struct t_{{name}}_MultiKey_HashFunc
|
||||||
|
{
|
||||||
|
std::size_t operator()(const t_{{name}}_MultiKey& stMK) const
|
||||||
|
{
|
||||||
|
std::size_t sHash = 0;
|
||||||
|
{{~for idx in x.index_list~}}
|
||||||
|
sHash ^= std::hash<{{cpp_define_type idx.type}}>()(stMK.{{idx.index_field.name}});
|
||||||
|
{{~end~}}
|
||||||
|
return sHash;
|
||||||
|
}
|
||||||
|
}t_{{name}}_MultiKey_HashFunc;
|
||||||
|
{{~end~}}
|
||||||
|
{{~end~}}
|
||||||
|
|
||||||
|
|
||||||
class {{name}}
|
class {{name}}
|
||||||
{
|
{
|
||||||
{{~if x.is_map_table ~}}
|
{{~if x.is_map_table ~}}
|
||||||
|
|
@ -61,6 +94,14 @@ class {{name}}
|
||||||
{{~else if x.is_list_table~}}
|
{{~else if x.is_list_table~}}
|
||||||
private:
|
private:
|
||||||
::bright::Vector<{{cpp_define_type value_type}}> _dataList;
|
::bright::Vector<{{cpp_define_type value_type}}> _dataList;
|
||||||
|
{{~if x.is_union_index~}}
|
||||||
|
::bright::HashMapMultiKey<t_{{name}}_MultiKey, {{cpp_define_type value_type}}, t_{{name}}_MultiKey_HashFunc> _dataMap;
|
||||||
|
{{~else if !x.index_list.empty?~}}
|
||||||
|
{{~for idx in x.index_list~}}
|
||||||
|
::bright::HashMap<{{cpp_define_type idx.type}}, {{cpp_define_type value_type}}> _dataMap_{{idx.index_field.name}};
|
||||||
|
{{~end~}}
|
||||||
|
{{~else~}}
|
||||||
|
{{~end~}}
|
||||||
|
|
||||||
public:
|
public:
|
||||||
bool load(ByteBuf& _buf)
|
bool load(ByteBuf& _buf)
|
||||||
|
|
@ -72,12 +113,57 @@ class {{name}}
|
||||||
{{cpp_define_type value_type}} _v;
|
{{cpp_define_type value_type}} _v;
|
||||||
{{cpp_deserialize '_buf' '_v' value_type}}
|
{{cpp_deserialize '_buf' '_v' value_type}}
|
||||||
_dataList.push_back(_v);
|
_dataList.push_back(_v);
|
||||||
|
{{~if x.is_union_index~}}
|
||||||
|
t_{{name}}_MultiKey stKey;
|
||||||
|
{{~for idx in x.index_list~}}
|
||||||
|
stKey.{{idx.index_field.name}} = _v->{{idx.index_field.name}};
|
||||||
|
{{~end~}}
|
||||||
|
_dataMap[stKey] = _v;
|
||||||
|
{{~else if !x.index_list.empty?~}}
|
||||||
|
{{~for idx in x.index_list~}}
|
||||||
|
_dataMap_{{idx.index_field.name}}[_v->{{idx.index_field.name}}] = _v;
|
||||||
|
{{~end~}}
|
||||||
|
{{~else~}}
|
||||||
|
{{~end~}}
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
const ::bright::Vector<{{cpp_define_type value_type}}>& getDataList() const { return _dataList; }
|
const ::bright::Vector<{{cpp_define_type value_type}}>& getDataList() const { return _dataList; }
|
||||||
|
|
||||||
|
{{~if x.is_union_index~}}
|
||||||
|
::bright::HashMapMultiKey<t_{{name}}_MultiKey, {{cpp_define_type value_type}}, t_{{name}}_MultiKey_HashFunc>& getDataMap()
|
||||||
|
{
|
||||||
|
return _dataMap;
|
||||||
|
}
|
||||||
|
{{value_type.bean.cpp_full_name}}* getRaw(t_{{name}}_MultiKey& key)
|
||||||
|
{
|
||||||
|
auto it = _dataMap.find(key);
|
||||||
|
return it != _dataMap.end() ? it->second.get() : nullptr;
|
||||||
|
}
|
||||||
|
{{cpp_define_type value_type}} get(t_{{name}}_MultiKey& key)
|
||||||
|
{
|
||||||
|
auto it = _dataMap.find(key);
|
||||||
|
return it != _dataMap.end() ? it->second : nullptr;
|
||||||
|
}
|
||||||
|
{{~else if !x.index_list.empty?~}}
|
||||||
|
{{~for idx in x.index_list~}}
|
||||||
|
::bright::HashMap<{{cpp_define_type idx.type}}, {{cpp_define_type value_type}}>& getDataMapBy{{idx.index_field.name}}()
|
||||||
|
{
|
||||||
|
return _dataMap_{{idx.index_field.name}};
|
||||||
|
}
|
||||||
|
{{value_type.bean.cpp_full_name}}* getRawBy{{idx.index_field.name}}({{cpp_define_type idx.type}} key)
|
||||||
|
{
|
||||||
|
auto it = _dataMap_{{idx.index_field.name}}.find(key);
|
||||||
|
return it != _dataMap_{{idx.index_field.name}}.end() ? it->second.get() : nullptr;
|
||||||
|
}
|
||||||
|
{{cpp_define_type value_type}} getBy{{idx.index_field.name}}({{cpp_define_type 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~}}
|
||||||
{{value_type.bean.cpp_full_name}}* getRaw(size_t index) const
|
{{value_type.bean.cpp_full_name}}* getRaw(size_t index) const
|
||||||
{
|
{
|
||||||
return _dataList[index].get();
|
return _dataList[index].get();
|
||||||
|
|
@ -87,7 +173,7 @@ class {{name}}
|
||||||
{
|
{
|
||||||
return _dataList[index];
|
return _dataList[index];
|
||||||
}
|
}
|
||||||
|
{{~end~}}
|
||||||
void resolve(::bright::HashMap<::bright::String, void*>& _tables)
|
void resolve(::bright::HashMap<::bright::String, void*>& _tables)
|
||||||
{
|
{
|
||||||
for(auto v : _dataList)
|
for(auto v : _dataList)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue