Skip to content

Commit d04ffcd

Browse files
Fix complex member printing for DynamicDataHelper (#2964)
* 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) Co-authored-by: methylDragon <[email protected]>
1 parent 24f5962 commit d04ffcd

File tree

1 file changed

+68
-30
lines changed

1 file changed

+68
-30
lines changed

src/cpp/dynamic-types/DynamicDataHelper.cpp

Lines changed: 68 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -251,33 +251,71 @@ void DynamicDataHelper::aux_index_position(
251251
void DynamicDataHelper::print_basic_collection(
252252
DynamicData* data)
253253
{
254-
const std::vector<uint32_t>& bounds = data->type_->descriptor_->bound_;
254+
if (data->type_->get_kind() == TK_SEQUENCE)
255+
{
256+
auto count = data->get_item_count();
257+
std::cout << "[";
258+
for (uint32_t i = 0; i < count; ++i)
259+
{
260+
print_basic_element(data, i, data->type_->get_element_type()->get_kind());
261+
std::cout << (i == count - 1 ? "]" : ", ");
262+
}
263+
if (count == 0)
264+
{
265+
std::cout << "]";
266+
}
267+
}
268+
else
269+
{
270+
const std::vector<uint32_t>& bounds = data->type_->descriptor_->bound_;
255271

256-
std::vector<std::vector<uint32_t>> positions;
257-
fill_array_positions(bounds, positions);
272+
std::vector<std::vector<uint32_t>> positions;
273+
fill_array_positions(bounds, positions);
258274

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

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

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

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

@@ -286,61 +324,58 @@ void DynamicDataHelper::print_complex_element(
286324
MemberId id,
287325
const std::string& tabs)
288326
{
289-
const TypeDescriptor* desc = data->type_->get_type_descriptor();
327+
DynamicData* st_data = data->loan_value(id);
328+
const TypeDescriptor* desc = st_data->type_->get_type_descriptor();
290329
switch (desc->get_kind())
291330
{
292331
case TK_STRUCTURE:
293332
case TK_BITSET:
294333
{
295-
DynamicData* st_data = data->loan_value(id);
334+
std::cout << "<struct/bitset>" << std::endl;
296335
std::map<types::MemberId, types::DynamicTypeMember*> members;
297-
data->type_->get_all_members(members);
336+
st_data->type_->get_all_members(members);
298337
for (auto it : members)
299338
{
300339
print_member(st_data, it.second, tabs + "\t");
301340
}
302-
data->return_loaned_value(st_data);
303341
break;
304342
}
305343
case TK_UNION:
306344
{
307-
DynamicData* st_data = data->loan_value(id);
345+
std::cout << "<union>" << std::endl;
308346
DynamicTypeMember member;
309-
data->type_->get_member(member, data->union_id_);
347+
st_data->type_->get_member(member, st_data->union_id_);
310348
print_member(st_data, &member, tabs + "\t");
311349
break;
312350
}
313351
case TK_SEQUENCE:
314352
case TK_ARRAY:
315353
{
316-
DynamicData* st_data = data->loan_value(id);
317354
print_collection(st_data, tabs + "\t");
318-
data->return_loaned_value(st_data);
319355
break;
320356
}
321357
case TK_MAP:
322358
{
323-
DynamicData* st_data = data->loan_value(id);
359+
std::cout << "<map>" << std::endl;
324360
std::map<types::MemberId, types::DynamicTypeMember*> members;
325-
data->type_->get_all_members(members);
326-
size_t size = data->get_item_count();
361+
st_data->type_->get_all_members(members);
362+
size_t size = st_data->get_item_count();
327363
for (size_t i = 0; i < size; ++i)
328364
{
329365
size_t index = i * 2;
330-
MemberId member_id = data->get_member_id_at_index(static_cast<uint32_t>(index));
366+
MemberId member_id = st_data->get_member_id_at_index(static_cast<uint32_t>(index));
331367
std::cout << "Key: ";
332368
print_member(st_data, members[member_id], tabs + "\t");
333369
member_id = data->get_member_id_at_index(static_cast<uint32_t>(index + 1));
334370
std::cout << "Value: ";
335371
print_member(st_data, members[member_id], tabs + "\t");
336372
}
337-
data->return_loaned_value(st_data);
338373
break;
339374
}
340375
default:
341376
break;
342377
}
343-
std::cout << std::endl;
378+
data->return_loaned_value(st_data);
344379
}
345380

346381
void DynamicDataHelper::print_member(
@@ -372,12 +407,14 @@ void DynamicDataHelper::print_member(
372407
case TK_BITMASK:
373408
{
374409
print_basic_element(data, type->get_id(), desc->get_kind());
410+
std::cout << std::endl;
375411
break;
376412
}
377413
case TK_STRUCTURE:
378414
case TK_BITSET:
379415
{
380416
DynamicData* st_data = data->loan_value(type->get_id());
417+
std::cout << "<struct/bitset>" << std::endl;
381418
std::map<types::MemberId, types::DynamicTypeMember*> members;
382419
desc->get_type()->get_all_members(members);
383420
for (auto it : members)
@@ -389,6 +426,7 @@ void DynamicDataHelper::print_member(
389426
}
390427
case TK_UNION:
391428
{
429+
std::cout << "<union>" << std::endl;
392430
DynamicData* st_data = data->loan_value(type->get_id());
393431
DynamicTypeMember member;
394432
desc->get_type()->get_member(member, data->union_id_);
@@ -405,6 +443,7 @@ void DynamicDataHelper::print_member(
405443
}
406444
case TK_MAP:
407445
{
446+
std::cout << "<map>" << std::endl;
408447
DynamicData* st_data = data->loan_value(type->get_id());
409448
std::map<types::MemberId, types::DynamicTypeMember*> members;
410449
desc->get_type()->get_all_members(members);
@@ -425,5 +464,4 @@ void DynamicDataHelper::print_member(
425464
default:
426465
break;
427466
}
428-
std::cout << std::endl;
429467
}

0 commit comments

Comments
 (0)