From 7c04c8d691ffb9bb263101522290a4ba7fb23e80 Mon Sep 17 00:00:00 2001 From: Will Stott Date: Fri, 8 Jul 2022 15:26:39 +0100 Subject: [PATCH 1/4] DynamicDataHelper::print can print Sequences as well as Arrays Signed-off-by: Will Stott --- src/cpp/dynamic-types/DynamicDataHelper.cpp | 66 ++++++++++++++++----- 1 file changed, 51 insertions(+), 15 deletions(-) diff --git a/src/cpp/dynamic-types/DynamicDataHelper.cpp b/src/cpp/dynamic-types/DynamicDataHelper.cpp index bd82be7827e..93d9243acb3 100644 --- a/src/cpp/dynamic-types/DynamicDataHelper.cpp +++ b/src/cpp/dynamic-types/DynamicDataHelper.cpp @@ -251,16 +251,33 @@ void DynamicDataHelper::aux_index_position( void DynamicDataHelper::print_basic_collection( DynamicData* data) { - const std::vector& bounds = data->type_->descriptor_->bound_; + if (data->type_->get_kind() == TK_SEQUENCE) + { + auto count = data->get_item_count(); + std::cout << "["; + for (size_t i = 0; i < count; ++i) + { + print_basic_element(data, i, data->type_->get_element_type()->get_kind()); + std::cout << (i == count - 1 ? "]" : ", "); + } + if (count == 0) + { + std::cout << "]"; + } + } + else + { + const std::vector& bounds = data->type_->descriptor_->bound_; - std::vector> positions; - fill_array_positions(bounds, positions); + std::vector> positions; + fill_array_positions(bounds, positions); - std::cout << "["; - for (size_t i = 0; i < positions.size(); ++i) - { - print_basic_element(data, data->get_array_index(positions[i]), data->type_->get_element_type()->get_kind()); - std::cout << (i == positions.size() - 1 ? "]" : ", "); + std::cout << "["; + for (size_t i = 0; i < positions.size(); ++i) + { + print_basic_element(data, data->get_array_index(positions[i]), data->type_->get_element_type()->get_kind()); + std::cout << (i == positions.size() - 1 ? "]" : ", "); + } } } @@ -268,16 +285,35 @@ void DynamicDataHelper::print_complex_collection( DynamicData* data, const std::string& tabs) { - const std::vector& bounds = data->type_->descriptor_->bound_; + if (data->type_->get_kind() == TK_SEQUENCE) + { + auto count = data->get_item_count(); - std::vector> positions; - fill_array_positions(bounds, positions); + for (size_t i = 0; i < count; ++i) + { + std::cout << tabs << "[" << i << "] = "; + print_complex_element(data, i, tabs); + std::cout << std::endl; + } - for (size_t i = 0; i < positions.size(); ++i) + if (count == 0) + { + std::cout << "[]"; + } + } + else { - std::cout << tabs << "[" << i << "] = "; - print_complex_element(data, data->get_array_index(positions[i]), tabs); - std::cout << std::endl; + const std::vector& bounds = data->type_->descriptor_->bound_; + + std::vector> positions; + fill_array_positions(bounds, positions); + + for (size_t i = 0; i < positions.size(); ++i) + { + std::cout << tabs << "[" << i << "] = "; + print_complex_element(data, data->get_array_index(positions[i]), tabs); + std::cout << std::endl; + } } } From c876f95620cbd50fd36c9a36ae29ce078cc6a9db Mon Sep 17 00:00:00 2001 From: methylDragon Date: Mon, 19 Sep 2022 19:09:04 -0700 Subject: [PATCH 2/4] Fix complex member printing Signed-off-by: methylDragon --- src/cpp/dynamic-types/DynamicDataHelper.cpp | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/src/cpp/dynamic-types/DynamicDataHelper.cpp b/src/cpp/dynamic-types/DynamicDataHelper.cpp index bd82be7827e..baebbd4250e 100644 --- a/src/cpp/dynamic-types/DynamicDataHelper.cpp +++ b/src/cpp/dynamic-types/DynamicDataHelper.cpp @@ -286,7 +286,8 @@ void DynamicDataHelper::print_complex_element( MemberId id, const std::string& tabs) { - const TypeDescriptor* desc = data->type_->get_type_descriptor(); + DynamicData* st_data = data->loan_value(id); + const TypeDescriptor* desc = st_data->type_->get_type_descriptor(); switch (desc->get_kind()) { case TK_STRUCTURE: @@ -294,47 +295,43 @@ void DynamicDataHelper::print_complex_element( { DynamicData* st_data = data->loan_value(id); std::map members; - data->type_->get_all_members(members); + st_data->type_->get_all_members(members); for (auto it : members) { print_member(st_data, it.second, tabs + "\t"); } - data->return_loaned_value(st_data); break; } case TK_UNION: { DynamicData* st_data = data->loan_value(id); DynamicTypeMember member; - data->type_->get_member(member, data->union_id_); + st_data->type_->get_member(member, st_data->union_id_); print_member(st_data, &member, tabs + "\t"); break; } case TK_SEQUENCE: case TK_ARRAY: { - DynamicData* st_data = data->loan_value(id); print_collection(st_data, tabs + "\t"); - data->return_loaned_value(st_data); break; } case TK_MAP: { DynamicData* st_data = data->loan_value(id); std::map members; - data->type_->get_all_members(members); - size_t size = data->get_item_count(); + st_data->type_->get_all_members(members); + size_t size = st_data->get_item_count(); for (size_t i = 0; i < size; ++i) { size_t index = i * 2; - MemberId member_id = data->get_member_id_at_index(static_cast(index)); + MemberId member_id = st_data->get_member_id_at_index(static_cast(index)); std::cout << "Key: "; print_member(st_data, members[member_id], tabs + "\t"); member_id = data->get_member_id_at_index(static_cast(index + 1)); std::cout << "Value: "; print_member(st_data, members[member_id], tabs + "\t"); } - data->return_loaned_value(st_data); break; } default: From 5c1bc2e6dbff018eebfb1e5a5b3cc6a87012457b Mon Sep 17 00:00:00 2001 From: methylDragon Date: Mon, 19 Sep 2022 19:09:16 -0700 Subject: [PATCH 3/4] Clean up prints Signed-off-by: methylDragon --- src/cpp/dynamic-types/DynamicDataHelper.cpp | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/cpp/dynamic-types/DynamicDataHelper.cpp b/src/cpp/dynamic-types/DynamicDataHelper.cpp index baebbd4250e..5ebc094cc59 100644 --- a/src/cpp/dynamic-types/DynamicDataHelper.cpp +++ b/src/cpp/dynamic-types/DynamicDataHelper.cpp @@ -262,12 +262,14 @@ void DynamicDataHelper::print_basic_collection( print_basic_element(data, data->get_array_index(positions[i]), data->type_->get_element_type()->get_kind()); std::cout << (i == positions.size() - 1 ? "]" : ", "); } + std::cout << std::endl; } void DynamicDataHelper::print_complex_collection( DynamicData* data, const std::string& tabs) { + std::cout << std::endl; const std::vector& bounds = data->type_->descriptor_->bound_; std::vector> positions; @@ -277,7 +279,6 @@ void DynamicDataHelper::print_complex_collection( { std::cout << tabs << "[" << i << "] = "; print_complex_element(data, data->get_array_index(positions[i]), tabs); - std::cout << std::endl; } } @@ -293,7 +294,7 @@ void DynamicDataHelper::print_complex_element( case TK_STRUCTURE: case TK_BITSET: { - DynamicData* st_data = data->loan_value(id); + std::cout << "" << std::endl; std::map members; st_data->type_->get_all_members(members); for (auto it : members) @@ -304,7 +305,7 @@ void DynamicDataHelper::print_complex_element( } case TK_UNION: { - DynamicData* st_data = data->loan_value(id); + std::cout << "" << std::endl; DynamicTypeMember member; st_data->type_->get_member(member, st_data->union_id_); print_member(st_data, &member, tabs + "\t"); @@ -318,7 +319,7 @@ void DynamicDataHelper::print_complex_element( } case TK_MAP: { - DynamicData* st_data = data->loan_value(id); + std::cout << "" << std::endl; std::map members; st_data->type_->get_all_members(members); size_t size = st_data->get_item_count(); @@ -337,7 +338,7 @@ void DynamicDataHelper::print_complex_element( default: break; } - std::cout << std::endl; + data->return_loaned_value(st_data); } void DynamicDataHelper::print_member( @@ -369,12 +370,14 @@ void DynamicDataHelper::print_member( case TK_BITMASK: { print_basic_element(data, type->get_id(), desc->get_kind()); + std::cout << std::endl; break; } case TK_STRUCTURE: case TK_BITSET: { DynamicData* st_data = data->loan_value(type->get_id()); + std::cout << "" << std::endl; std::map members; desc->get_type()->get_all_members(members); for (auto it : members) @@ -386,6 +389,7 @@ void DynamicDataHelper::print_member( } case TK_UNION: { + std::cout << "" << std::endl; DynamicData* st_data = data->loan_value(type->get_id()); DynamicTypeMember member; desc->get_type()->get_member(member, data->union_id_); @@ -402,6 +406,7 @@ void DynamicDataHelper::print_member( } case TK_MAP: { + std::cout << "" << std::endl; DynamicData* st_data = data->loan_value(type->get_id()); std::map members; desc->get_type()->get_all_members(members); @@ -422,5 +427,4 @@ void DynamicDataHelper::print_member( default: break; } - std::cout << std::endl; } From df44d8c1eeb6abd10fed65523016233a6b67f81e Mon Sep 17 00:00:00 2001 From: methylDragon Date: Wed, 21 Sep 2022 18:11:54 -0700 Subject: [PATCH 4/4] Fix FastDDS windows CI error Signed-off-by: methylDragon --- src/cpp/dynamic-types/DynamicDataHelper.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/cpp/dynamic-types/DynamicDataHelper.cpp b/src/cpp/dynamic-types/DynamicDataHelper.cpp index 789c5683b73..6bfbd13ba7e 100644 --- a/src/cpp/dynamic-types/DynamicDataHelper.cpp +++ b/src/cpp/dynamic-types/DynamicDataHelper.cpp @@ -255,7 +255,7 @@ void DynamicDataHelper::print_basic_collection( { auto count = data->get_item_count(); std::cout << "["; - for (size_t i = 0; i < count; ++i) + for (uint32_t i = 0; i < count; ++i) { print_basic_element(data, i, data->type_->get_element_type()->get_kind()); std::cout << (i == count - 1 ? "]" : ", "); @@ -291,7 +291,7 @@ void DynamicDataHelper::print_complex_collection( { auto count = data->get_item_count(); - for (size_t i = 0; i < count; ++i) + for (uint32_t i = 0; i < count; ++i) { std::cout << tabs << "[" << i << "] = "; print_complex_element(data, i, tabs);