diff --git a/src/cpp/dynamic-types/DynamicDataHelper.cpp b/src/cpp/dynamic-types/DynamicDataHelper.cpp index 4a65ebaeeee..430c97fb361 100644 --- a/src/cpp/dynamic-types/DynamicDataHelper.cpp +++ b/src/cpp/dynamic-types/DynamicDataHelper.cpp @@ -58,7 +58,7 @@ void DynamicDataHelper::print_basic_element( MemberId id, TypeKind kind) { - switch(kind) + switch (kind) { case TK_NONE: { @@ -252,33 +252,71 @@ 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 (uint32_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 ? "]" : ", "); + } } + std::cout << std::endl; } void DynamicDataHelper::print_complex_collection( DynamicData* data, const std::string& tabs) { - const std::vector& bounds = data->type_->descriptor_->bound_; + std::cout << std::endl; + if (data->type_->get_kind() == TK_SEQUENCE) + { + auto count = data->get_item_count(); - std::vector> positions; - fill_array_positions(bounds, positions); + for (uint32_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; + } } } @@ -287,61 +325,58 @@ void DynamicDataHelper::print_complex_element( MemberId id, const std::string& tabs) { - const TypeDescriptor* desc = data->type_->get_type_descriptor(); - switch(desc->get_kind()) + DynamicData* st_data = data->loan_value(id); + const TypeDescriptor* desc = st_data->type_->get_type_descriptor(); + switch (desc->get_kind()) { case TK_STRUCTURE: case TK_BITSET: { - DynamicData* st_data = data->loan_value(id); + std::cout << "" << std::endl; 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); + std::cout << "" << std::endl; 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::cout << "" << std::endl; 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: break; } - std::cout << std::endl; + data->return_loaned_value(st_data); } void DynamicDataHelper::print_member( @@ -351,7 +386,7 @@ void DynamicDataHelper::print_member( { std::cout << tabs << type->get_name() << ": "; const MemberDescriptor* desc = type->get_descriptor(); - switch(desc->get_kind()) + switch (desc->get_kind()) { case TK_NONE: case TK_BOOLEAN: @@ -373,12 +408,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) @@ -390,6 +427,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_); @@ -406,6 +444,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); @@ -426,5 +465,4 @@ void DynamicDataHelper::print_member( default: break; } - std::cout << std::endl; }