schema_cpp.sbn 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. #include "{{__schema_header_file}}"
  2. {{namespace_with_grace_begin __top_module}}
  3. {{~for bean in __beans~}}
  4. bool {{make_cpp_name bean.full_name}}::deserialize(::luban::ByteBuf& _buf)
  5. {
  6. {{~if bean.parent_def_type~}}
  7. if (!{{make_cpp_name bean.parent_def_type.full_name}}::deserialize(_buf))
  8. {
  9. return false;
  10. }
  11. {{~end~}}
  12. {{~ for field in bean.export_fields ~}}
  13. {{deserialize '_buf' (format_field_name __code_style field.name) field.ctype}}
  14. {{~end~}}
  15. return true;
  16. }
  17. {{~if bean.is_abstract_type~}}
  18. bool {{make_cpp_name bean.full_name}}::deserialize{{bean.name}}(::luban::ByteBuf& _buf, {{make_cpp_name bean.full_name}}*& _out)
  19. {
  20. int32_t id;
  21. if (!_buf.readInt(id)) return false;
  22. switch (id)
  23. {
  24. {{~for child in bean.hierarchy_not_abstract_children~}}
  25. case {{make_type_cpp_name child}}::__ID__: { _out = LUBAN_NEW({{make_type_cpp_name child}}); if (_out->deserialize(_buf)) { return true; } else { _out = nullptr; return false;} }
  26. {{~end~}}
  27. default: { _out = nullptr; return false;}
  28. }
  29. }
  30. {{~else~}}
  31. bool {{make_cpp_name bean.full_name}}::deserialize{{bean.name}}(::luban::ByteBuf& _buf, {{make_cpp_name bean.full_name}}*& _out)
  32. {
  33. _out = LUBAN_NEW({{make_type_cpp_name bean}});
  34. return _out->deserialize(_buf);
  35. }
  36. {{~end~}}
  37. {{~end~}}
  38. {{namespace_with_grace_end __top_module}}