MCPcopy Create free account
hub / github.com/apache/brpc / generate_parsing

Function generate_parsing

src/mcpack2pb/generator.cpp:270–651  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

268}
269
270static bool generate_parsing(const google::protobuf::Descriptor* d,
271 std::set<std::string> & ref_msgs,
272 std::set<std::string> & ref_maps,
273 google::protobuf::io::Printer& impl) {
274 std::string var_name = mcpack2pb::to_var_name(butil::EnsureString(d->full_name()));
275 std::string cpp_name = mcpack2pb::to_cpp_name(butil::EnsureString(d->full_name()));
276 ref_msgs.insert(var_name);
277
278 impl.Print("\n// $msg$ from mcpack\n", "msg", d->full_name());
279 for (int i = 0; i < d->field_count(); ++i) {
280 const google::protobuf::FieldDescriptor* f = d->field(i);
281 if (f->is_repeated()) {
282 impl.Print("// repeated $type$ $name$ = $number$;\n"
283 , "type", field_to_string(f)
284 , "name", f->name()
285 , "number", butil::string_printf("%d", f->number()));
286 impl.Print(TEMPLATE_OF_ADD_FUNC_SIGNATURE()
287 , "vmsg", var_name
288 , "lcfield", f->lowercase_name());
289 switch (f->cpp_type()) {
290 case google::protobuf::FieldDescriptor::CPPTYPE_INT32:
291 impl.Print(TEMPLATE_OF_ADD_FUNC_BODY(int32, int32)
292 , "msg", cpp_name
293 , "field", f->full_name()
294 , "lcfield", f->lowercase_name());
295 break;
296 case google::protobuf::FieldDescriptor::CPPTYPE_INT64:
297 impl.Print(TEMPLATE_OF_ADD_FUNC_BODY(int64, int64)
298 , "msg", cpp_name
299 , "field", f->full_name()
300 , "lcfield", f->lowercase_name());
301 break;
302 case google::protobuf::FieldDescriptor::CPPTYPE_UINT32:
303 impl.Print(TEMPLATE_OF_ADD_FUNC_BODY(uint32, uint32)
304 , "msg", cpp_name
305 , "field", f->full_name()
306 , "lcfield", f->lowercase_name());
307 break;
308 case google::protobuf::FieldDescriptor::CPPTYPE_UINT64:
309 impl.Print(TEMPLATE_OF_ADD_FUNC_BODY(uint64, uint64)
310 , "msg", cpp_name
311 , "field", f->full_name()
312 , "lcfield", f->lowercase_name());
313 break;
314 case google::protobuf::FieldDescriptor::CPPTYPE_BOOL:
315 impl.Print(TEMPLATE_OF_ADD_FUNC_BODY(bool, bool)
316 , "msg", cpp_name
317 , "field", f->full_name()
318 , "lcfield", f->lowercase_name());
319 break;
320 case google::protobuf::FieldDescriptor::CPPTYPE_ENUM:
321 impl.Print(
322 "{\n"
323 " $msg$* const msg = static_cast<$msg$*>(msg_base);\n"
324 " if (value.type() == ::mcpack2pb::FIELD_ISOARRAY) {\n"
325 " ::mcpack2pb::ISOArrayIterator it(value);\n"
326 " msg->mutable_$lcfield$()->Reserve(it.item_count());\n"
327 " for (; it != NULL; ++it) {\n"

Callers 1

GenerateMethod · 0.85

Calls 12

to_var_nameFunction · 0.85
EnsureStringFunction · 0.85
to_cpp_nameFunction · 0.85
field_to_stringFunction · 0.85
string_printfFunction · 0.85
is_map_entryFunction · 0.85
field_countMethod · 0.80
fieldMethod · 0.80
insertMethod · 0.45
PrintMethod · 0.45
nameMethod · 0.45
failedMethod · 0.45

Tested by

no test coverage detected