diff --git a/td/generate/tl_writer_cpp.cpp b/td/generate/tl_writer_cpp.cpp index daa860786..ed65208e9 100644 --- a/td/generate/tl_writer_cpp.cpp +++ b/td/generate/tl_writer_cpp.cpp @@ -284,7 +284,7 @@ std::string TD_TL_writer_cpp::gen_var_type_fetch(const tl::arg &a) const { } std::string TD_TL_writer_cpp::get_pretty_field_name(std::string field_name) const { - if (!field_name.empty() && field_name.back() == ']') { + if (!field_name.empty() && field_name[0] == '_') { return ""; } auto equals_pos = field_name.find('='); @@ -306,16 +306,10 @@ std::string TD_TL_writer_cpp::get_pretty_class_name(std::string class_name) cons std::string TD_TL_writer_cpp::gen_vector_store(const std::string &field_name, const tl::tl_tree_type *t, const std::vector &vars, int storer_type) const { - std::string num = field_name.back() == ']' ? "2" : ""; - return "{ const array<" + gen_type_name(t) + "> &v" + num + " = " + field_name + - "; const std::uint32_t multiplicity" + num + " = static_cast(v" + num + - ".size()); const auto vector_name" + num + " = \"" + get_pretty_class_name("vector") + - "[\" + td::to_string(multiplicity" + num + ")+ \"]\"; s.store_class_begin(\"" + - get_pretty_field_name(field_name) + "\", vector_name" + num + - ".c_str()); " - "for (std::uint32_t i" + - num + " = 0; i" + num + " < multiplicity" + num + "; i" + num + "++) { " + - gen_type_store("v" + num + "[i" + num + "]", t, vars, storer_type) + " } s.store_class_end(); }"; + std::string num = !field_name.empty() && field_name[0] == '_' ? "2" : ""; + return "{ s.store_vector_begin(\"" + get_pretty_field_name(field_name) + "\", " + field_name + + ".size()); for (const auto &_value" + num + " : " + field_name + ") { " + + gen_type_store("_value" + num, t, vars, storer_type) + " } s.store_class_end(); }"; } std::string TD_TL_writer_cpp::gen_store_class_name(const tl::tl_tree_type *tree_type) const { diff --git a/tdutils/td/utils/TlStorerToString.h b/tdutils/td/utils/TlStorerToString.h index 68b74bea7..512378c38 100644 --- a/tdutils/td/utils/TlStorerToString.h +++ b/tdutils/td/utils/TlStorerToString.h @@ -149,6 +149,14 @@ class TlStorerToString { store_field_end(); } + void store_vector_begin(const char *field_name, size_t vector_size) { + store_field_begin(field_name); + result += "vector["; + result += (PSLICE() << vector_size).c_str(); + result += "] {\n"; + shift += 2; + } + void store_class_begin(const char *field_name, const char *class_name) { store_field_begin(field_name); result += class_name;