@@ -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(
252252void 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
268286void 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
347382void 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