MCPcopy Create free account
hub / github.com/OpenDDS/OpenDDS / gen_struct_i

Function gen_struct_i

dds/idl/value_reader_generator.cpp:301–361  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

299 }
300
301 bool gen_struct_i(AST_Structure* node, const std::string& type_name,
302 bool use_cxx11, ExtensibilityKind ek, FieldFilter field_filter)
303 {
304 const std::string wrapped_name = key_only_type_name(node, type_name, field_filter, false);
305 Function read("vread", "bool");
306 read.addArg("value_reader", "OpenDDS::DCPS::ValueReader&");
307 read.addArg("value", wrapped_name);
308 read.endArgs();
309
310 be_global->impl_ <<
311 " static const ListMemberHelper::Pair pairs[] = {";
312
313 const std::string value_prefix = field_filter == FieldFilter_All ? "value." : "value.value.";
314 const Fields fields(node, field_filter);
315
316 // KeyOnly wrapper has no field if there is no explicit key.
317 bool has_field = false;
318 for (Fields::Iterator it = fields.begin(); it != fields.end(); ++it) {
319 AST_Field* const field = *it;
320 be_global->impl_ <<
321 "{\"" << canonical_name(field) << "\"," << be_global->get_id(field) << "},";
322 has_field = true;
323 }
324
325 be_global->impl_ <<
326 "{0,0}};\n"
327 " ListMemberHelper helper(pairs);\n";
328
329 be_global->impl_ <<
330 " if (!value_reader.begin_struct(" << extensibility_kind(ek) << ")) return false;\n";
331
332 if (has_field) {
333 be_global->impl_ <<
334 " XTypes::MemberId member_id;\n"
335 " while (value_reader.members_remaining()) {\n"
336 " if (!value_reader.begin_struct_member(member_id, helper)) return false;\n"
337 " switch (member_id) {\n";
338
339 for (Fields::Iterator it = fields.begin(); it != fields.end(); ++it) {
340 AST_Field* const field = *it;
341 const std::string field_name = field->local_name()->get_string();
342 be_global->impl_ <<
343 " case " << be_global->get_id(field) << ": {\n";
344 generate_read(value_prefix + field_name, use_cxx11 ? "()" : "", field_name,
345 field->field_type(), "i", 3, nested(field_filter), be_global->is_optional(field));
346 be_global->impl_ <<
347 " break;\n"
348 " }\n";
349 }
350
351 be_global->impl_ <<
352 " }\n"
353 " if (!value_reader.end_struct_member()) return false;\n"
354 " }\n";
355 }
356
357 be_global->impl_ <<
358 " if (!value_reader.end_struct()) return false;\n"

Callers 1

gen_structMethod · 0.70

Calls 12

key_only_type_nameFunction · 0.85
canonical_nameFunction · 0.85
extensibility_kindFunction · 0.85
generate_readFunction · 0.85
addArgMethod · 0.80
endArgsMethod · 0.80
is_optionalMethod · 0.80
nestedFunction · 0.70
beginMethod · 0.45
endMethod · 0.45
get_idMethod · 0.45
get_stringMethod · 0.45

Tested by

no test coverage detected