Skip to content

Commit 03fdb06

Browse files
mergify[bot]methylDragonMiguelCompany
authored
Fix complex member printing for DynamicDataHelper ((#2965)
* Fix complex member printing for DynamicDataHelper (#2957) * DynamicDataHelper::print can print Sequences as well as Arrays Signed-off-by: Will Stott <[email protected]> * Fix complex member printing Signed-off-by: methylDragon <[email protected]> * Clean up prints Signed-off-by: methylDragon <[email protected]> * Fix FastDDS windows CI error Signed-off-by: methylDragon <[email protected]> Signed-off-by: methylDragon <[email protected]> Co-authored-by: Will Stott <[email protected]> (cherry picked from commit 78473a0) # Conflicts: # src/cpp/dynamic-types/DynamicDataHelper.cpp * Fix conflict Co-authored-by: methylDragon <[email protected]> * Fixing linters Signed-off-by: Miguel Company <[email protected]> Signed-off-by: Miguel Company <[email protected]> Co-authored-by: methylDragon <[email protected]> Co-authored-by: Miguel Company <[email protected]>
1 parent 9f6dece commit 03fdb06

File tree

1 file changed

+71
-33
lines changed

1 file changed

+71
-33
lines changed

src/cpp/dynamic-types/DynamicDataHelper.cpp

Lines changed: 71 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ void DynamicDataHelper::print_basic_element(
5858
MemberId id,
5959
TypeKind kind)
6060
{
61-
switch(kind)
61+
switch (kind)
6262
{
6363
case TK_NONE:
6464
{
@@ -252,33 +252,71 @@ void DynamicDataHelper::aux_index_position(
252252
void DynamicDataHelper::print_basic_collection(
253253
DynamicData* data)
254254
{
255-
const std::vector<uint32_t>& bounds = data->type_->descriptor_->bound_;
255+
if (data->type_->get_kind() == TK_SEQUENCE)
256+
{
257+
auto count = data->get_item_count();
258+
std::cout << "[";
259+
for (uint32_t i = 0; i < count; ++i)
260+
{
261+
print_basic_element(data, i, data->type_->get_element_type()->get_kind());
262+
std::cout << (i == count - 1 ? "]" : ", ");
263+
}
264+
if (count == 0)
265+
{
266+
std::cout << "]";
267+
}
268+
}
269+
else
270+
{
271+
const std::vector<uint32_t>& bounds = data->type_->descriptor_->bound_;
256272

257-
std::vector<std::vector<uint32_t>> positions;
258-
fill_array_positions(bounds, positions);
273+
std::vector<std::vector<uint32_t>> positions;
274+
fill_array_positions(bounds, positions);
259275

260-
std::cout << "[";
261-
for (size_t i = 0; i < positions.size(); ++i)
262-
{
263-
print_basic_element(data, data->get_array_index(positions[i]), data->type_->get_element_type()->get_kind());
264-
std::cout << (i == positions.size() - 1 ? "]" : ", ");
276+
std::cout << "[";
277+
for (size_t i = 0; i < positions.size(); ++i)
278+
{
279+
print_basic_element(data, data->get_array_index(positions[i]), data->type_->get_element_type()->get_kind());
280+
std::cout << (i == positions.size() - 1 ? "]" : ", ");
281+
}
265282
}
283+
std::cout << std::endl;
266284
}
267285

268286
void DynamicDataHelper::print_complex_collection(
269287
DynamicData* data,
270288
const std::string& tabs)
271289
{
272-
const std::vector<uint32_t>& bounds = data->type_->descriptor_->bound_;
290+
std::cout << std::endl;
291+
if (data->type_->get_kind() == TK_SEQUENCE)
292+
{
293+
auto count = data->get_item_count();
273294

274-
std::vector<std::vector<uint32_t>> positions;
275-
fill_array_positions(bounds, positions);
295+
for (uint32_t i = 0; i < count; ++i)
296+
{
297+
std::cout << tabs << "[" << i << "] = ";
298+
print_complex_element(data, i, tabs);
299+
std::cout << std::endl;
300+
}
276301

277-
for (size_t i = 0; i < positions.size(); ++i)
302+
if (count == 0)
303+
{
304+
std::cout << "[]";
305+
}
306+
}
307+
else
278308
{
279-
std::cout << tabs << "[" << i << "] = ";
280-
print_complex_element(data, data->get_array_index(positions[i]), tabs);
281-
std::cout << std::endl;
309+
const std::vector<uint32_t>& bounds = data->type_->descriptor_->bound_;
310+
311+
std::vector<std::vector<uint32_t>> positions;
312+
fill_array_positions(bounds, positions);
313+
314+
for (size_t i = 0; i < positions.size(); ++i)
315+
{
316+
std::cout << tabs << "[" << i << "] = ";
317+
print_complex_element(data, data->get_array_index(positions[i]), tabs);
318+
std::cout << std::endl;
319+
}
282320
}
283321
}
284322

@@ -287,61 +325,58 @@ void DynamicDataHelper::print_complex_element(
287325
MemberId id,
288326
const std::string& tabs)
289327
{
290-
const TypeDescriptor* desc = data->type_->get_type_descriptor();
291-
switch(desc->get_kind())
328+
DynamicData* st_data = data->loan_value(id);
329+
const TypeDescriptor* desc = st_data->type_->get_type_descriptor();
330+
switch (desc->get_kind())
292331
{
293332
case TK_STRUCTURE:
294333
case TK_BITSET:
295334
{
296-
DynamicData* st_data = data->loan_value(id);
335+
std::cout << "<struct/bitset>" << std::endl;
297336
std::map<types::MemberId, types::DynamicTypeMember*> members;
298-
data->type_->get_all_members(members);
337+
st_data->type_->get_all_members(members);
299338
for (auto it : members)
300339
{
301340
print_member(st_data, it.second, tabs + "\t");
302341
}
303-
data->return_loaned_value(st_data);
304342
break;
305343
}
306344
case TK_UNION:
307345
{
308-
DynamicData* st_data = data->loan_value(id);
346+
std::cout << "<union>" << std::endl;
309347
DynamicTypeMember member;
310-
data->type_->get_member(member, data->union_id_);
348+
st_data->type_->get_member(member, st_data->union_id_);
311349
print_member(st_data, &member, tabs + "\t");
312350
break;
313351
}
314352
case TK_SEQUENCE:
315353
case TK_ARRAY:
316354
{
317-
DynamicData* st_data = data->loan_value(id);
318355
print_collection(st_data, tabs + "\t");
319-
data->return_loaned_value(st_data);
320356
break;
321357
}
322358
case TK_MAP:
323359
{
324-
DynamicData* st_data = data->loan_value(id);
360+
std::cout << "<map>" << std::endl;
325361
std::map<types::MemberId, types::DynamicTypeMember*> members;
326-
data->type_->get_all_members(members);
327-
size_t size = data->get_item_count();
362+
st_data->type_->get_all_members(members);
363+
size_t size = st_data->get_item_count();
328364
for (size_t i = 0; i < size; ++i)
329365
{
330366
size_t index = i * 2;
331-
MemberId member_id = data->get_member_id_at_index(static_cast<uint32_t>(index));
367+
MemberId member_id = st_data->get_member_id_at_index(static_cast<uint32_t>(index));
332368
std::cout << "Key: ";
333369
print_member(st_data, members[member_id], tabs + "\t");
334370
member_id = data->get_member_id_at_index(static_cast<uint32_t>(index + 1));
335371
std::cout << "Value: ";
336372
print_member(st_data, members[member_id], tabs + "\t");
337373
}
338-
data->return_loaned_value(st_data);
339374
break;
340375
}
341376
default:
342377
break;
343378
}
344-
std::cout << std::endl;
379+
data->return_loaned_value(st_data);
345380
}
346381

347382
void DynamicDataHelper::print_member(
@@ -351,7 +386,7 @@ void DynamicDataHelper::print_member(
351386
{
352387
std::cout << tabs << type->get_name() << ": ";
353388
const MemberDescriptor* desc = type->get_descriptor();
354-
switch(desc->get_kind())
389+
switch (desc->get_kind())
355390
{
356391
case TK_NONE:
357392
case TK_BOOLEAN:
@@ -373,12 +408,14 @@ void DynamicDataHelper::print_member(
373408
case TK_BITMASK:
374409
{
375410
print_basic_element(data, type->get_id(), desc->get_kind());
411+
std::cout << std::endl;
376412
break;
377413
}
378414
case TK_STRUCTURE:
379415
case TK_BITSET:
380416
{
381417
DynamicData* st_data = data->loan_value(type->get_id());
418+
std::cout << "<struct/bitset>" << std::endl;
382419
std::map<types::MemberId, types::DynamicTypeMember*> members;
383420
desc->get_type()->get_all_members(members);
384421
for (auto it : members)
@@ -390,6 +427,7 @@ void DynamicDataHelper::print_member(
390427
}
391428
case TK_UNION:
392429
{
430+
std::cout << "<union>" << std::endl;
393431
DynamicData* st_data = data->loan_value(type->get_id());
394432
DynamicTypeMember member;
395433
desc->get_type()->get_member(member, data->union_id_);
@@ -406,6 +444,7 @@ void DynamicDataHelper::print_member(
406444
}
407445
case TK_MAP:
408446
{
447+
std::cout << "<map>" << std::endl;
409448
DynamicData* st_data = data->loan_value(type->get_id());
410449
std::map<types::MemberId, types::DynamicTypeMember*> members;
411450
desc->get_type()->get_all_members(members);
@@ -426,5 +465,4 @@ void DynamicDataHelper::print_member(
426465
default:
427466
break;
428467
}
429-
std::cout << std::endl;
430468
}

0 commit comments

Comments
 (0)