@@ -251,33 +251,71 @@ void DynamicDataHelper::aux_index_position(
251251void 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
267285void 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
346381void 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