LCOV - code coverage report
Current view: top level - io/source/json - json_element_reader.c (source / functions) Hit Total Coverage
Test: crystal-facet-uml_v1.61.0_covts Lines: 483 575 84.0 %
Date: 2024-10-26 21:44:38 Functions: 20 21 95.2 %

          Line data    Source code
       1             : /* File: json_element_reader.c; Copyright and License: see below */
       2             : 
       3             : #include "json/json_element_reader.h"
       4             : #include "u8/u8_trace.h"
       5             : #include "u8/u8_log.h"
       6             : #include <assert.h>
       7             : 
       8          18 : void json_element_reader_init ( json_element_reader_t *this_, universal_input_stream_t *in_data )
       9             : {
      10          18 :     U8_TRACE_BEGIN();
      11          18 :     assert( NULL != in_data );
      12             : 
      13          18 :     (*this_).temp_string = utf8stringbuf_init( sizeof((*this_).temp_string_buffer), (*this_).temp_string_buffer );
      14             : 
      15          18 :     json_token_reader_init( &((*this_).tokenizer), in_data );
      16             : 
      17          18 :     (*this_).top_array_after_first_entry = false;
      18          18 :     (*this_).sub_array_after_first_entry = false;
      19             : 
      20          18 :     U8_TRACE_END();
      21          18 : }
      22             : 
      23           0 : void json_element_reader_reinit ( json_element_reader_t *this_, universal_input_stream_t *in_data )
      24             : {
      25           0 :     U8_TRACE_BEGIN();
      26           0 :     assert( NULL != in_data );
      27             : 
      28           0 :     json_element_reader_destroy( this_ );
      29           0 :     json_element_reader_init( this_, in_data );
      30             : 
      31           0 :     U8_TRACE_END();
      32           0 : }
      33             : 
      34          18 : void json_element_reader_destroy ( json_element_reader_t *this_ )
      35             : {
      36          18 :     U8_TRACE_BEGIN();
      37             : 
      38          18 :     json_token_reader_destroy( &((*this_).tokenizer) );
      39             : 
      40          18 :     U8_TRACE_END();
      41          18 : }
      42             : 
      43          18 : u8_error_t json_element_reader_expect_header ( json_element_reader_t *this_ )
      44             : {
      45          18 :     U8_TRACE_BEGIN();
      46          18 :     u8_error_t result = U8_ERROR_NONE;
      47          18 :     char member_name_buf[24] = "";
      48          18 :     utf8stringbuf_t member_name = UTF8STRINGBUF( member_name_buf );
      49             : 
      50          18 :     result = json_token_reader_expect_begin_object ( &((*this_).tokenizer) );
      51             : 
      52          18 :     if ( U8_ERROR_NONE == result )
      53             :     {
      54          17 :         result = json_token_reader_read_member_name ( &((*this_).tokenizer), member_name );
      55          17 :         if ( ! utf8stringbuf_equals_str( member_name, JSON_CONSTANTS_KEY_HEAD ) )
      56             :         {
      57           0 :             U8_LOG_ERROR_INT( "unexpected object contents at line",
      58             :                              json_token_reader_get_input_line( &((*this_).tokenizer) )
      59             :                            );
      60           0 :             result |= U8_ERROR_PARSER_STRUCTURE;
      61             :         }
      62             :     }
      63             : 
      64          18 :     if ( U8_ERROR_NONE == result )
      65             :     {
      66          17 :         result = json_token_reader_expect_name_separator( &((*this_).tokenizer) );
      67             :     }
      68             : 
      69          18 :     if ( U8_ERROR_NONE == result )
      70             :     {
      71          17 :         result = json_element_reader_skip_next_object( this_ );
      72             :     }
      73             : 
      74          18 :     U8_TRACE_END_ERR( result );
      75          18 :     return result;
      76             : }
      77             : 
      78          46 : u8_error_t json_element_reader_expect_begin_top_array ( json_element_reader_t *this_ )
      79             : {
      80          46 :     U8_TRACE_BEGIN();
      81          46 :     u8_error_t result = U8_ERROR_NONE;
      82          46 :     char member_name_buf[24] = "";
      83          46 :     utf8stringbuf_t member_name = UTF8STRINGBUF( member_name_buf );
      84             : 
      85          46 :     result = json_token_reader_expect_value_separator ( &((*this_).tokenizer) );
      86             : 
      87          46 :     if ( U8_ERROR_NONE == result )
      88             :     {
      89          46 :         result = json_token_reader_read_member_name ( &((*this_).tokenizer), member_name );
      90          46 :         if (( ! utf8stringbuf_equals_str( member_name, JSON_CONSTANTS_KEY_VIEWS ) )
      91          29 :             && ( ! utf8stringbuf_equals_str( member_name, JSON_CONSTANTS_KEY_NODES ) )
      92          14 :             && ( ! utf8stringbuf_equals_str( member_name, JSON_CONSTANTS_KEY_EDGES ) ))
      93             :         {
      94           0 :             U8_LOG_ERROR_INT( "unexpected object contents at line",
      95             :                              json_token_reader_get_input_line( &((*this_).tokenizer) )
      96             :                            );
      97           0 :             result |= U8_ERROR_PARSER_STRUCTURE;
      98             :         }
      99             :     }
     100             : 
     101          46 :     if ( U8_ERROR_NONE == result )
     102             :     {
     103          46 :         result = json_token_reader_expect_name_separator( &((*this_).tokenizer) );
     104             :     }
     105             : 
     106          46 :     if ( U8_ERROR_NONE == result )
     107             :     {
     108          46 :         result = json_token_reader_expect_begin_array( &((*this_).tokenizer) );
     109             :     }
     110             : 
     111          46 :     U8_TRACE_END_ERR( result );
     112          46 :     return result;
     113             : }
     114             : 
     115          11 : u8_error_t json_element_reader_expect_footer ( json_element_reader_t *this_ )
     116             : {
     117          11 :     U8_TRACE_BEGIN();
     118          11 :     u8_error_t result = U8_ERROR_NONE;
     119             : 
     120             :     bool end_ok;
     121          11 :     result = json_token_reader_check_end_object ( &((*this_).tokenizer), &end_ok );
     122          11 :     if ( ! end_ok )
     123             :     {
     124           0 :         U8_LOG_ERROR_INT( "unexpected object contents at line",
     125             :                             json_token_reader_get_input_line( &((*this_).tokenizer) )
     126             :                         );
     127           0 :         result |= U8_ERROR_PARSER_STRUCTURE;
     128             :     }
     129             : 
     130          11 :     if ( U8_ERROR_NONE == result )
     131             :     {
     132          11 :         result = json_token_reader_expect_eof ( &((*this_).tokenizer) );
     133             :     }
     134             : 
     135          11 :     U8_TRACE_END_ERR( result );
     136          11 :     return result;
     137             : }
     138             : 
     139          77 : u8_error_t json_element_reader_check_end_top_array ( json_element_reader_t *this_, bool* out_end )
     140             : {
     141          77 :     U8_TRACE_BEGIN();
     142          77 :     assert( NULL != out_end );
     143          77 :     u8_error_t result = U8_ERROR_NONE;
     144             : 
     145          77 :     result = json_token_reader_check_end_array ( &((*this_).tokenizer), out_end );
     146             : 
     147          77 :     if (( U8_ERROR_NONE == result ) && ( *out_end ))
     148             :     {
     149          40 :         (*this_).top_array_after_first_entry = false;
     150             :     }
     151             : 
     152          77 :     U8_TRACE_END_ERR( result );
     153          77 :     return result;
     154             : }
     155             : 
     156          20 : u8_error_t json_element_reader_expect_begin_sub_array ( json_element_reader_t *this_ )
     157             : {
     158          20 :     U8_TRACE_BEGIN();
     159          20 :     u8_error_t result = U8_ERROR_NONE;
     160             : 
     161          20 :     result = json_token_reader_expect_begin_array( &((*this_).tokenizer) );
     162          20 :     if ( U8_ERROR_NONE == result )
     163             :     {
     164          20 :         (*this_).sub_array_after_first_entry = false;
     165             :     }
     166             : 
     167          20 :     U8_TRACE_END_ERR( result );
     168          20 :     return result;
     169             : }
     170             : 
     171          49 : u8_error_t json_element_reader_check_end_sub_array ( json_element_reader_t *this_, bool* out_end )
     172             : {
     173          49 :     U8_TRACE_BEGIN();
     174          49 :     assert( NULL != out_end );
     175          49 :     u8_error_t result = U8_ERROR_NONE;
     176             : 
     177          49 :     result = json_token_reader_check_end_array ( &((*this_).tokenizer), out_end );
     178             : 
     179          49 :     if ( U8_ERROR_NONE == result )
     180             :     {
     181          49 :         if ( *out_end )
     182             :         {
     183          20 :             (*this_).sub_array_after_first_entry = false;
     184             :         }
     185             :         else
     186             :         {
     187          29 :             if ( (*this_).sub_array_after_first_entry )
     188             :             {
     189          11 :                 result = json_token_reader_expect_value_separator ( &((*this_).tokenizer) );
     190             :             }
     191             :             else
     192             :             {
     193          18 :                 (*this_).sub_array_after_first_entry = true;
     194             :             }
     195             :         }
     196             :     }
     197             : 
     198          49 :     U8_TRACE_END_ERR( result );
     199          49 :     return result;
     200             : }
     201             : 
     202          37 : u8_error_t json_element_reader_expect_begin_type_of_element ( json_element_reader_t *this_, data_table_t *out_type )
     203             : {
     204          37 :     U8_TRACE_BEGIN();
     205          37 :     assert ( NULL != out_type );
     206          37 :     u8_error_t result = U8_ERROR_NONE;
     207             : 
     208             :     bool array_end;
     209             :     char member_name_buf[24];
     210          37 :     utf8stringbuf_t member_name = UTF8STRINGBUF( member_name_buf );
     211             : 
     212          37 :     result = json_token_reader_check_end_array ( &((*this_).tokenizer), &array_end );
     213             : 
     214          37 :     if ( U8_ERROR_NONE == result )
     215             :     {
     216          37 :         if ( array_end )
     217             :         {
     218           0 :             (*out_type) = DATA_TABLE_VOID;
     219             :         }
     220             :         else
     221             :         {
     222          37 :             if ( (*this_).top_array_after_first_entry )
     223             :             {
     224           1 :                 result = json_token_reader_expect_value_separator ( &((*this_).tokenizer) );
     225             :             }
     226             :             else
     227             :             {
     228          36 :                 (*this_).top_array_after_first_entry = true;
     229             :             }
     230          37 :             if ( U8_ERROR_NONE == result )
     231             :             {
     232          37 :                 result = json_token_reader_expect_begin_object ( &((*this_).tokenizer) );
     233             :             }
     234          37 :             if ( U8_ERROR_NONE == result )
     235             :             {
     236          37 :                 result = json_token_reader_read_member_name ( &((*this_).tokenizer), member_name );
     237             :             }
     238          37 :             if ( U8_ERROR_NONE == result )
     239             :             {
     240          37 :                 if ( utf8stringbuf_equals_str( member_name, JSON_CONSTANTS_KEY_DIAGRAM ) )
     241             :                 {
     242           9 :                     (*out_type) = DATA_TABLE_DIAGRAM;
     243             :                 }
     244             :                 /*
     245             :                 else if ( utf8stringbuf_equals_str( member_name, JSON_CONSTANTS_KEY_DIAGRAMELEMENT ) )
     246             :                 {
     247             :                     (*out_type) = DATA_TABLE_DIAGRAMELEMENT;
     248             :                 }
     249             :                 */
     250          28 :                 else if ( utf8stringbuf_equals_str( member_name, JSON_CONSTANTS_KEY_CLASSIFIER ) )
     251             :                 {
     252          14 :                     (*out_type) = DATA_TABLE_CLASSIFIER;
     253             :                 }
     254             :                 /*
     255             :                 else if ( utf8stringbuf_equals_str( member_name, JSON_CONSTANTS_KEY_FEATURE ) )
     256             :                 {
     257             :                     (*out_type) = DATA_TABLE_FEATURE;
     258             :                 }
     259             :                 */
     260          14 :                 else if ( utf8stringbuf_equals_str( member_name, JSON_CONSTANTS_KEY_RELATIONSHIP ) )
     261             :                 {
     262          13 :                     (*out_type) = DATA_TABLE_RELATIONSHIP;
     263             :                 }
     264             :                 else
     265             :                 {
     266           1 :                     U8_LOG_ERROR_INT( "unexpected token at line",
     267             :                                      json_token_reader_get_input_line( &((*this_).tokenizer) )
     268             :                                    );
     269           1 :                     result = U8_ERROR_PARSER_STRUCTURE;
     270             :                 }
     271             :             }
     272          37 :             if ( U8_ERROR_NONE == result )
     273             :             {
     274          36 :                 result = json_token_reader_expect_name_separator ( &((*this_).tokenizer) );
     275             :             }
     276             :         }
     277             :     }
     278             : 
     279          37 :     U8_TRACE_END_ERR( result );
     280          37 :     return result;
     281             : }
     282             : 
     283          31 : u8_error_t json_element_reader_expect_end_type_of_element ( json_element_reader_t *this_ )
     284             : {
     285          31 :     U8_TRACE_BEGIN();
     286          31 :     u8_error_t result = U8_ERROR_NONE;
     287             :     bool condition;
     288             : 
     289          31 :     result = json_token_reader_check_end_object ( &((*this_).tokenizer), &condition );
     290          31 :     if ( ! condition )
     291             :     {
     292           0 :         U8_LOG_ERROR_INT( "unexpected object contents at line",
     293             :                          json_token_reader_get_input_line( &((*this_).tokenizer) )
     294             :                        );
     295           0 :         result |= U8_ERROR_PARSER_STRUCTURE;
     296             :     }
     297             : 
     298          31 :     U8_TRACE_END_ERR( result );
     299          31 :     return result;
     300             : }
     301             : 
     302          14 : u8_error_t json_element_reader_get_next_classifier ( json_element_reader_t *this_,
     303             :                                                      data_classifier_t *out_object,
     304             :                                                      bool* out_has_features_array )
     305             : {
     306          14 :     U8_TRACE_BEGIN();
     307          14 :     assert ( NULL != out_object );
     308          14 :     assert ( NULL != out_has_features_array );
     309          14 :     u8_error_t result = U8_ERROR_NONE;
     310             : 
     311             :     char member_name_buf[24];
     312          14 :     utf8stringbuf_t member_name = UTF8STRINGBUF( member_name_buf );
     313             : 
     314          14 :     data_classifier_init_empty( out_object );
     315             : 
     316             :     /* header */
     317             : 
     318          14 :     result = json_token_reader_expect_begin_object ( &((*this_).tokenizer) );
     319             : 
     320             :     /* members */
     321             : 
     322          14 :     bool first_member_passed = false;
     323          14 :     bool object_end = false;
     324          14 :     bool break_at_features = false;
     325         156 :     while (( ! object_end )&&( ! break_at_features )&&( U8_ERROR_NONE == result ))
     326             :     {
     327         142 :         result = json_token_reader_check_end_object ( &((*this_).tokenizer), &object_end );
     328         142 :         if ( U8_ERROR_NONE == result )
     329             :         {
     330         142 :             if ( ! object_end )
     331             :             {
     332         142 :                 if ( first_member_passed )
     333             :                 {
     334         128 :                     result = json_token_reader_expect_value_separator ( &((*this_).tokenizer) );
     335             :                 }
     336             :                 else
     337             :                 {
     338          14 :                     first_member_passed = true;
     339             :                 }
     340         142 :                 if ( U8_ERROR_NONE == result )
     341             :                 {
     342         142 :                     result = json_token_reader_read_member_name ( &((*this_).tokenizer), member_name );
     343             :                 }
     344         142 :                 if ( U8_ERROR_NONE == result )
     345             :                 {
     346         142 :                     result = json_token_reader_expect_name_separator ( &((*this_).tokenizer) );
     347             :                 }
     348         142 :                 if ( U8_ERROR_NONE == result )
     349             :                 {
     350         142 :                     if ( utf8stringbuf_equals_str( member_name, JSON_CONSTANTS_KEY_CLASSIFIER_ID ) )
     351             :                     {
     352             :                         int64_t parsed_integer;
     353          14 :                         result = json_token_reader_read_int_value ( &((*this_).tokenizer), &parsed_integer );
     354          14 :                         data_classifier_set_row_id ( out_object, parsed_integer );
     355             :                     }
     356         128 :                     else if ( utf8stringbuf_equals_str( member_name, JSON_CONSTANTS_KEY_CLASSIFIER_MAIN_TYPE ) )
     357             :                     {
     358             :                         int64_t parsed_integer;
     359          14 :                         result = json_token_reader_read_int_value ( &((*this_).tokenizer), &parsed_integer );
     360          14 :                         data_classifier_set_main_type ( out_object, parsed_integer );
     361             :                     }
     362         114 :                     else if ( utf8stringbuf_equals_str( member_name, JSON_CONSTANTS_KEY_CLASSIFIER_MAIN_TYPE_NAME ) )
     363             :                     {
     364           7 :                         result = json_element_reader_skip_next_string( this_ );
     365             :                     }
     366         107 :                     else if ( utf8stringbuf_equals_str( member_name, JSON_CONSTANTS_KEY_CLASSIFIER_X_ORDER ) )
     367             :                     {
     368             :                         int64_t parsed_integer;
     369          14 :                         result = json_token_reader_read_int_value ( &((*this_).tokenizer), &parsed_integer );
     370          14 :                         data_classifier_set_x_order ( out_object, parsed_integer );
     371             :                     }
     372          93 :                     else if ( utf8stringbuf_equals_str( member_name, JSON_CONSTANTS_KEY_CLASSIFIER_Y_ORDER ) )
     373             :                     {
     374             :                         int64_t parsed_integer;
     375          14 :                         result = json_token_reader_read_int_value ( &((*this_).tokenizer), &parsed_integer );
     376          14 :                         data_classifier_set_y_order ( out_object, parsed_integer );
     377             :                     }
     378          79 :                     else if ( utf8stringbuf_equals_str( member_name, JSON_CONSTANTS_KEY_CLASSIFIER_LIST_ORDER ) )
     379             :                     {
     380             :                         int64_t parsed_integer;
     381          14 :                         result = json_token_reader_read_int_value ( &((*this_).tokenizer), &parsed_integer );
     382          14 :                         data_classifier_set_list_order ( out_object, parsed_integer );
     383             :                     }
     384          65 :                     else if ( utf8stringbuf_equals_str( member_name, JSON_CONSTANTS_KEY_CLASSIFIER_STEREOTYPE ) )
     385             :                     {
     386          14 :                         result = json_token_reader_read_string_value( &((*this_).tokenizer), (*this_).temp_string );
     387          14 :                         data_classifier_set_stereotype( out_object,
     388          14 :                                                         utf8stringbuf_get_string( (*this_).temp_string )
     389             :                                                       );
     390             :                     }
     391          51 :                     else if ( utf8stringbuf_equals_str( member_name, JSON_CONSTANTS_KEY_CLASSIFIER_NAME ) )
     392             :                     {
     393          14 :                         result = json_token_reader_read_string_value( &((*this_).tokenizer), (*this_).temp_string );
     394          14 :                         data_classifier_set_name( out_object,
     395          14 :                                                   utf8stringbuf_get_string( (*this_).temp_string )
     396             :                                                 );
     397             :                     }
     398          37 :                     else if ( utf8stringbuf_equals_str( member_name, JSON_CONSTANTS_KEY_CLASSIFIER_DESCRIPTION ) )
     399             :                     {
     400          14 :                         result = json_element_reader_private_read_string_array( this_, (*this_).temp_string );
     401          14 :                         data_classifier_set_description( out_object,
     402          14 :                                                          utf8stringbuf_get_string( (*this_).temp_string )
     403             :                                                        );
     404             :                     }
     405          23 :                     else if ( utf8stringbuf_equals_str( member_name, JSON_CONSTANTS_KEY_UUID ) )
     406             :                     {
     407           9 :                         result = json_token_reader_read_string_value( &((*this_).tokenizer), (*this_).temp_string );
     408           9 :                         result |= data_classifier_set_uuid( out_object,
     409           9 :                                                             utf8stringbuf_get_string( (*this_).temp_string )
     410             :                                                           );
     411             :                     }
     412          14 :                     else if ( utf8stringbuf_equals_str( member_name, JSON_CONSTANTS_KEY_CLASSIFIER_FEATURES ) )
     413             :                     {
     414          14 :                         break_at_features = true;  /* end the loop */
     415             :                     }
     416             :                     else
     417             :                     {
     418           0 :                         U8_LOG_ERROR_INT( "unexpected member name at line",
     419             :                                          json_token_reader_get_input_line( &((*this_).tokenizer) )
     420             :                                        );
     421           0 :                         result = U8_ERROR_PARSER_STRUCTURE;
     422             :                     }
     423             :                 }
     424             :             }
     425             :         }
     426             :         else
     427             :         {
     428           0 :             U8_LOG_ERROR_INT( "unexpected character at line",
     429             :                              json_token_reader_get_input_line( &((*this_).tokenizer) )
     430             :                            );
     431           0 :             result = U8_ERROR_PARSER_STRUCTURE;
     432           0 :             object_end = true;
     433             :         }
     434             :     }
     435             : 
     436             :     /* footer */
     437             : 
     438          14 :     if ( U8_ERROR_NONE == result )
     439             :     {
     440          14 :         data_classifier_trace( out_object );
     441             :     }
     442             : 
     443          14 :     *out_has_features_array = break_at_features;
     444          14 :     U8_TRACE_END_ERR( result );
     445          14 :     return result;
     446             : }
     447             : 
     448          20 : u8_error_t json_element_reader_end_unfinished_object ( json_element_reader_t *this_ )
     449             : {
     450          20 :     U8_TRACE_BEGIN();
     451          20 :     u8_error_t result = U8_ERROR_NONE;
     452             : 
     453          20 :     bool object_end = false;
     454          20 :     result = json_token_reader_check_end_object ( &((*this_).tokenizer), &object_end );
     455          20 :     if ( U8_ERROR_NONE == result )
     456             :     {
     457          20 :         if (! object_end)
     458             :         {
     459           0 :             result = U8_ERROR_PARSER_STRUCTURE;
     460             :         }
     461             :     }
     462             : 
     463          20 :     U8_TRACE_END_ERR( result );
     464          20 :     return result;
     465             : }
     466             : 
     467           9 : u8_error_t json_element_reader_get_next_diagram ( json_element_reader_t *this_,
     468             :                                                   data_diagram_t *out_object,
     469             :                                                   utf8stringbuf_t out_parent_uuid,
     470             :                                                   bool* out_has_diagramelements_array )
     471             : {
     472           9 :     U8_TRACE_BEGIN();
     473           9 :     assert ( NULL != out_object );
     474           9 :     assert ( NULL != out_has_diagramelements_array );
     475           9 :     u8_error_t result = U8_ERROR_NONE;
     476             : 
     477             :     char member_name_buf[24];
     478           9 :     utf8stringbuf_t member_name = UTF8STRINGBUF( member_name_buf );
     479             : 
     480           9 :     data_diagram_init_empty( out_object );
     481           9 :     utf8stringbuf_clear( out_parent_uuid );
     482             : 
     483             :     /* header */
     484             : 
     485           9 :     result = json_token_reader_expect_begin_object ( &((*this_).tokenizer) );
     486             : 
     487             :     /* members */
     488             : 
     489           9 :     bool first_member_passed = false;
     490           9 :     bool object_end = false;
     491           9 :     bool break_at_subelements = false;
     492          92 :     while (( ! object_end )&&( ! break_at_subelements )&&( U8_ERROR_NONE == result ))
     493             :     {
     494          83 :         result = json_token_reader_check_end_object ( &((*this_).tokenizer), &object_end );
     495          83 :         if ( U8_ERROR_NONE == result )
     496             :         {
     497          83 :             if ( ! object_end )
     498             :             {
     499          82 :                 if ( first_member_passed )
     500             :                 {
     501          74 :                     result = json_token_reader_expect_value_separator ( &((*this_).tokenizer) );
     502             :                 }
     503             :                 else
     504             :                 {
     505           8 :                     first_member_passed = true;
     506             :                 }
     507          82 :                 if ( U8_ERROR_NONE == result )
     508             :                 {
     509          82 :                     result = json_token_reader_read_member_name ( &((*this_).tokenizer), member_name );
     510             :                 }
     511          82 :                 if ( U8_ERROR_NONE == result )
     512             :                 {
     513          82 :                     result = json_token_reader_expect_name_separator ( &((*this_).tokenizer) );
     514             :                 }
     515          82 :                 if ( U8_ERROR_NONE == result )
     516             :                 {
     517          82 :                     if ( utf8stringbuf_equals_str( member_name, JSON_CONSTANTS_KEY_DIAGRAM_ID ) )
     518             :                     {
     519             :                         int64_t parsed_integer;
     520           8 :                         result = json_token_reader_read_int_value ( &((*this_).tokenizer), &parsed_integer );
     521           8 :                         data_diagram_set_row_id ( out_object, parsed_integer );
     522             :                     }
     523          74 :                     else if ( utf8stringbuf_equals_str( member_name, JSON_CONSTANTS_KEY_DIAGRAM_PARENT_ID ) )
     524             :                     {
     525             :                         int64_t ignored_integer;
     526           0 :                         result = json_token_reader_read_int_value ( &((*this_).tokenizer), &ignored_integer );
     527             :                         (void) ignored_integer;
     528             :                     }
     529          74 :                     else if ( utf8stringbuf_equals_str( member_name, JSON_CONSTANTS_KEY_DIAGRAM_PARENT_NAME ) )
     530             :                     {
     531           7 :                         result = json_element_reader_skip_next_string( this_ );
     532             :                     }
     533          67 :                     else if ( utf8stringbuf_equals_str( member_name, JSON_CONSTANTS_KEY_DIAGRAM_DIAGRAM_TYPE ) )
     534             :                     {
     535             :                         int64_t parsed_integer;
     536           8 :                         result = json_token_reader_read_int_value ( &((*this_).tokenizer), &parsed_integer );
     537           8 :                         data_diagram_set_diagram_type ( out_object, parsed_integer );
     538             :                     }
     539          59 :                     else if ( utf8stringbuf_equals_str( member_name, JSON_CONSTANTS_KEY_DIAGRAM_DIAGRAM_TYPE_NAME ) )
     540             :                     {
     541           7 :                         result = json_element_reader_skip_next_string( this_ );
     542             :                     }
     543          52 :                     else if ( utf8stringbuf_equals_str( member_name, JSON_CONSTANTS_KEY_DIAGRAM_LIST_ORDER ) )
     544             :                     {
     545             :                         int64_t parsed_integer;
     546           8 :                         result = json_token_reader_read_int_value ( &((*this_).tokenizer), &parsed_integer );
     547           8 :                         data_diagram_set_list_order ( out_object, parsed_integer );
     548             :                     }
     549          44 :                     else if ( utf8stringbuf_equals_str( member_name, JSON_CONSTANTS_KEY_DIAGRAM_DESCRIPTION ) )
     550             :                     {
     551           8 :                         result = json_element_reader_private_read_string_array( this_, (*this_).temp_string );
     552           8 :                         data_diagram_set_description( out_object,
     553           8 :                                                       utf8stringbuf_get_string( (*this_).temp_string )
     554             :                                                     );
     555             :                     }
     556          36 :                     else if ( utf8stringbuf_equals_str( member_name, JSON_CONSTANTS_KEY_DIAGRAM_NAME ) )
     557             :                     {
     558           8 :                         result = json_token_reader_read_string_value( &((*this_).tokenizer), (*this_).temp_string );
     559           8 :                         result |= data_diagram_set_name( out_object,
     560           8 :                                                          utf8stringbuf_get_string( (*this_).temp_string )
     561             :                                                        );
     562             :                     }
     563          28 :                     else if ( utf8stringbuf_equals_str( member_name, JSON_CONSTANTS_KEY_DIAGRAM_STEREOTYPE ) )
     564             :                     {
     565             :                         /* new in 1.43.0: stereotype; imported since 1.47.0 */
     566           0 :                         result = json_token_reader_read_string_value( &((*this_).tokenizer), (*this_).temp_string );
     567           0 :                         result |= data_diagram_set_stereotype( out_object,
     568           0 :                                                                utf8stringbuf_get_string( (*this_).temp_string )
     569             :                                                              );
     570             :                     }
     571          28 :                     else if ( utf8stringbuf_equals_str( member_name, JSON_CONSTANTS_KEY_DIAGRAM_DISPLAY_FLAGS ) )
     572             :                     {
     573             :                         int64_t parsed_integer;
     574           7 :                         result = json_token_reader_read_int_value( &((*this_).tokenizer), &parsed_integer );
     575           7 :                         data_diagram_set_display_flags ( out_object, parsed_integer );
     576             :                     }
     577          21 :                     else if ( utf8stringbuf_equals_str( member_name, JSON_CONSTANTS_KEY_DIAGRAM_DISPLAY_FLAG_NAMES ) )
     578             :                     {
     579           7 :                         result = json_element_reader_skip_next_string( this_ );
     580             :                     }
     581          14 :                     else if ( utf8stringbuf_equals_str( member_name, JSON_CONSTANTS_KEY_DIAGRAM_PARENT ) )
     582             :                     {
     583           0 :                         result = json_token_reader_read_string_value( &((*this_).tokenizer), out_parent_uuid );
     584             :                     }
     585          14 :                     else if ( utf8stringbuf_equals_str( member_name, JSON_CONSTANTS_KEY_UUID ) )
     586             :                     {
     587           7 :                         result = json_token_reader_read_string_value( &((*this_).tokenizer), (*this_).temp_string );
     588           7 :                         result |= data_diagram_set_uuid( out_object,
     589           7 :                                                          utf8stringbuf_get_string( (*this_).temp_string )
     590             :                                                        );
     591             :                     }
     592           7 :                     else if ( utf8stringbuf_equals_str( member_name, JSON_CONSTANTS_KEY_DIAGRAM_ELEMENTS ) )
     593             :                     {
     594           7 :                         break_at_subelements = true;  /* end the loop */
     595             :                     }
     596             :                     else
     597             :                     {
     598           0 :                         U8_LOG_ERROR_INT( "unexpected member name at line",
     599             :                                          json_token_reader_get_input_line( &((*this_).tokenizer) )
     600             :                                        );
     601           0 :                         result = U8_ERROR_PARSER_STRUCTURE;
     602             :                     }
     603             :                 }
     604             :             }
     605             :         }
     606             :         else
     607             :         {
     608           0 :             U8_LOG_ERROR_INT( "unexpected character at line",
     609             :                              json_token_reader_get_input_line( &((*this_).tokenizer) )
     610             :                            );
     611           0 :             result = U8_ERROR_PARSER_STRUCTURE;
     612           0 :             object_end = true;
     613             :         }
     614             :     }
     615             : 
     616             :     /* footer */
     617             : 
     618           9 :     if ( U8_ERROR_NONE == result )
     619             :     {
     620           8 :         data_diagram_trace( out_object );
     621             :     }
     622             : 
     623           9 :     *out_has_diagramelements_array = break_at_subelements;
     624           9 :     U8_TRACE_END_ERR( result );
     625           9 :     return result;
     626             : }
     627             : 
     628          13 : u8_error_t json_element_reader_get_next_relationship ( json_element_reader_t *this_,
     629             :                                                        data_relationship_t *out_object,
     630             :                                                        utf8stringbuf_t out_from_node_uuid,
     631             :                                                        utf8stringbuf_t out_to_node_uuid
     632             :                                                      )
     633             : {
     634          13 :     U8_TRACE_BEGIN();
     635          13 :     assert( NULL != out_object );
     636          13 :     u8_error_t result = U8_ERROR_NONE;
     637             : 
     638             :     char member_name_buf[24];
     639          13 :     utf8stringbuf_t member_name = UTF8STRINGBUF( member_name_buf );
     640             : 
     641          13 :     data_relationship_init_empty( out_object );
     642          13 :     utf8stringbuf_clear( out_from_node_uuid );
     643          13 :     utf8stringbuf_clear( out_to_node_uuid );
     644             : 
     645             :     /* header */
     646             : 
     647          13 :     result = json_token_reader_expect_begin_object ( &((*this_).tokenizer) );
     648             : 
     649             :     /* members */
     650             : 
     651          13 :     bool first_member_passed = false;
     652          13 :     bool object_end = false;
     653         236 :     while (( ! object_end )&&( U8_ERROR_NONE == result ))
     654             :     {
     655         223 :         result = json_token_reader_check_end_object ( &((*this_).tokenizer), &object_end );
     656         223 :         if ( U8_ERROR_NONE == result )
     657             :         {
     658         223 :             if ( ! object_end )
     659             :             {
     660         210 :                 if ( first_member_passed )
     661             :                 {
     662         197 :                     result = json_token_reader_expect_value_separator ( &((*this_).tokenizer) );
     663             :                 }
     664             :                 else
     665             :                 {
     666          13 :                     first_member_passed = true;
     667             :                 }
     668         210 :                 if ( U8_ERROR_NONE == result )
     669             :                 {
     670         210 :                     result = json_token_reader_read_member_name ( &((*this_).tokenizer), member_name );
     671             :                 }
     672         210 :                 if ( U8_ERROR_NONE == result )
     673             :                 {
     674         210 :                     result = json_token_reader_expect_name_separator ( &((*this_).tokenizer) );
     675             :                 }
     676         210 :                 if ( U8_ERROR_NONE == result )
     677             :                 {
     678         210 :                     if ( utf8stringbuf_equals_str( member_name, JSON_CONSTANTS_KEY_RELATIONSHIP_ID ) )
     679             :                     {
     680             :                         int64_t parsed_integer;
     681          13 :                         result = json_token_reader_read_int_value ( &((*this_).tokenizer), &parsed_integer );
     682          13 :                         data_relationship_set_row_id ( out_object, parsed_integer );
     683             :                     }
     684         197 :                     else if ( utf8stringbuf_equals_str( member_name, JSON_CONSTANTS_KEY_RELATIONSHIP_MAIN_TYPE ) )
     685             :                     {
     686             :                         int64_t parsed_integer;
     687          13 :                         result = json_token_reader_read_int_value ( &((*this_).tokenizer), &parsed_integer );
     688          13 :                         data_relationship_set_main_type ( out_object, parsed_integer );
     689             :                     }
     690         184 :                     else if ( utf8stringbuf_equals_str( member_name, JSON_CONSTANTS_KEY_RELATIONSHIP_MAIN_TYPE_NAME ) )
     691             :                     {
     692           7 :                         result = json_element_reader_skip_next_string( this_ );
     693             :                     }
     694         177 :                     else if ( utf8stringbuf_equals_str( member_name, JSON_CONSTANTS_KEY_RELATIONSHIP_STEREOTYPE ) )
     695             :                     {
     696             :                         /* new in 1.43.0: stereotype; imported since 1.47.0 */
     697           0 :                         result = json_token_reader_read_string_value( &((*this_).tokenizer), (*this_).temp_string );
     698           0 :                         data_relationship_set_stereotype( out_object,
     699           0 :                                                           utf8stringbuf_get_string( (*this_).temp_string )
     700             :                                                         );
     701             :                     }
     702         177 :                     else if ( utf8stringbuf_equals_str( member_name, JSON_CONSTANTS_KEY_RELATIONSHIP_LIST_ORDER ) )
     703             :                     {
     704             :                         int64_t parsed_integer;
     705          13 :                         result = json_token_reader_read_int_value ( &((*this_).tokenizer), &parsed_integer );
     706          13 :                         data_relationship_set_list_order ( out_object, parsed_integer );
     707             :                     }
     708         164 :                     else if ( utf8stringbuf_equals_str( member_name, JSON_CONSTANTS_KEY_RELATIONSHIP_DESCRIPTION ) )
     709             :                     {
     710          13 :                         result = json_element_reader_private_read_string_array( this_, (*this_).temp_string );
     711          13 :                         data_relationship_set_description( out_object,
     712          13 :                                                            utf8stringbuf_get_string( (*this_).temp_string )
     713             :                                                          );
     714             :                     }
     715         151 :                     else if ( utf8stringbuf_equals_str( member_name, JSON_CONSTANTS_KEY_RELATIONSHIP_NAME ) )
     716             :                     {
     717          13 :                         result = json_token_reader_read_string_value( &((*this_).tokenizer), (*this_).temp_string );
     718          13 :                         data_relationship_set_name( out_object,
     719          13 :                                                     utf8stringbuf_get_string( (*this_).temp_string )
     720             :                                                   );
     721             :                     }
     722         138 :                     else if ( utf8stringbuf_equals_str( member_name, JSON_CONSTANTS_KEY_RELATIONSHIP_FROM_CLASSIFIER_ID ) )
     723             :                     {
     724             :                         int64_t parsed_integer;
     725          13 :                         result = json_token_reader_read_int_value( &((*this_).tokenizer), &parsed_integer );
     726          13 :                         data_relationship_set_from_classifier_row_id ( out_object, parsed_integer );
     727             :                     }
     728         125 :                     else if ( utf8stringbuf_equals_str( member_name, JSON_CONSTANTS_KEY_RELATIONSHIP_FROM_CLASSIFIER_NAME ) )
     729             :                     {
     730          13 :                         result = json_token_reader_read_string_value( &((*this_).tokenizer), (*this_).temp_string );
     731          13 :                         U8_TRACE_INFO_STR( "from-classifier name:", utf8stringbuf_get_string( (*this_).temp_string ) );
     732             :                     }
     733         112 :                     else if ( utf8stringbuf_equals_str( member_name, JSON_CONSTANTS_KEY_RELATIONSHIP_FROM_FEATURE_ID ) )
     734             :                     {
     735             :                         int64_t parsed_integer;
     736          13 :                         result = json_token_reader_read_int_value( &((*this_).tokenizer), &parsed_integer );
     737          13 :                         data_relationship_set_from_feature_row_id ( out_object, parsed_integer );
     738             :                     }
     739          99 :                     else if ( utf8stringbuf_equals_str( member_name, JSON_CONSTANTS_KEY_RELATIONSHIP_FROM_FEATURE_KEY ) )
     740             :                     {
     741          13 :                         result = json_token_reader_read_string_value( &((*this_).tokenizer), (*this_).temp_string );
     742          13 :                         U8_TRACE_INFO_STR( "from-feature key:", utf8stringbuf_get_string( (*this_).temp_string ) );
     743             :                     }
     744          86 :                     else if ( utf8stringbuf_equals_str( member_name, JSON_CONSTANTS_KEY_RELATIONSHIP_TO_CLASSIFIER_ID ) )
     745             :                     {
     746             :                         int64_t parsed_integer;
     747          13 :                         result = json_token_reader_read_int_value( &((*this_).tokenizer), &parsed_integer );
     748          13 :                         data_relationship_set_to_classifier_row_id ( out_object, parsed_integer );
     749             :                     }
     750          73 :                     else if ( utf8stringbuf_equals_str( member_name, JSON_CONSTANTS_KEY_RELATIONSHIP_TO_CLASSIFIER_NAME ) )
     751             :                     {
     752          13 :                         result = json_token_reader_read_string_value( &((*this_).tokenizer), (*this_).temp_string );
     753          13 :                         U8_TRACE_INFO_STR( "to-classifier name:", utf8stringbuf_get_string( (*this_).temp_string ) );
     754             :                     }
     755          60 :                     else if ( utf8stringbuf_equals_str( member_name, JSON_CONSTANTS_KEY_RELATIONSHIP_TO_FEATURE_ID ) )
     756             :                     {
     757             :                         int64_t parsed_integer;
     758          13 :                         result = json_token_reader_read_int_value( &((*this_).tokenizer), &parsed_integer );
     759          13 :                         data_relationship_set_to_feature_row_id ( out_object, parsed_integer );
     760             :                     }
     761          47 :                     else if ( utf8stringbuf_equals_str( member_name, JSON_CONSTANTS_KEY_RELATIONSHIP_TO_FEATURE_KEY ) )
     762             :                     {
     763             : 
     764          13 :                         result = json_token_reader_read_string_value( &((*this_).tokenizer), (*this_).temp_string );
     765          13 :                         U8_TRACE_INFO_STR( "to-feature key:", utf8stringbuf_get_string( (*this_).temp_string ) );
     766             :                     }
     767          34 :                     else if ( utf8stringbuf_equals_str( member_name, JSON_CONSTANTS_KEY_RELATIONSHIP_FROM_NODE ) )
     768             :                     {
     769          13 :                         result = json_token_reader_read_string_value( &((*this_).tokenizer), out_from_node_uuid );
     770             :                     }
     771          21 :                     else if ( utf8stringbuf_equals_str( member_name, JSON_CONSTANTS_KEY_RELATIONSHIP_TO_NODE ) )
     772             :                     {
     773          13 :                         result = json_token_reader_read_string_value( &((*this_).tokenizer), out_to_node_uuid );
     774             :                     }
     775           8 :                     else if ( utf8stringbuf_equals_str( member_name, JSON_CONSTANTS_KEY_UUID ) )
     776             :                     {
     777           8 :                         result = json_token_reader_read_string_value( &((*this_).tokenizer), (*this_).temp_string );
     778           8 :                         result |= data_relationship_set_uuid( out_object,
     779           8 :                                                               utf8stringbuf_get_string( (*this_).temp_string )
     780             :                                                             );
     781             :                     }
     782             :                     else
     783             :                     {
     784           0 :                         U8_LOG_ERROR_INT( "unexpected member name at line",
     785             :                                          json_token_reader_get_input_line( &((*this_).tokenizer) )
     786             :                                        );
     787           0 :                         result = U8_ERROR_PARSER_STRUCTURE;
     788             :                     }
     789             :                 }
     790             :             }
     791             :         }
     792             :         else
     793             :         {
     794           0 :             U8_LOG_ERROR_INT( "unexpected character at line",
     795             :                              json_token_reader_get_input_line( &((*this_).tokenizer) )
     796             :                            );
     797           0 :             result = U8_ERROR_PARSER_STRUCTURE;
     798           0 :             object_end = true;
     799             :         }
     800             :     }
     801             : 
     802             :     /* footer */
     803             : 
     804          13 :     if ( U8_ERROR_NONE == result )
     805             :     {
     806          13 :         data_relationship_trace( out_object );
     807             :     }
     808             : 
     809          13 :     U8_TRACE_END_ERR( result );
     810          13 :     return result;
     811             : }
     812             : 
     813          17 : u8_error_t json_element_reader_skip_next_object ( json_element_reader_t *this_ )
     814             : {
     815          17 :     U8_TRACE_BEGIN();
     816          17 :     u8_error_t result = U8_ERROR_NONE;
     817             : 
     818             :     char member_name_buf[24];
     819          17 :     utf8stringbuf_t member_name = UTF8STRINGBUF( member_name_buf );
     820             : 
     821             :     /* header */
     822             : 
     823          17 :     result = json_token_reader_expect_begin_object ( &((*this_).tokenizer) );
     824             : 
     825             :     /* members */
     826             : 
     827          17 :     bool first_member_passed = false;
     828          17 :     bool object_end = false;
     829          34 :     while (( ! object_end )&&( U8_ERROR_NONE == result ))
     830             :     {
     831          17 :         result = json_token_reader_check_end_object ( &((*this_).tokenizer), &object_end );
     832          17 :         if ( U8_ERROR_NONE == result )
     833             :         {
     834          17 :             if ( ! object_end )
     835             :             {
     836           0 :                 if ( first_member_passed )
     837             :                 {
     838           0 :                     result = json_token_reader_expect_value_separator ( &((*this_).tokenizer) );
     839             :                 }
     840             :                 else
     841             :                 {
     842           0 :                     first_member_passed = true;
     843             :                 }
     844           0 :                 if ( U8_ERROR_NONE == result )
     845             :                 {
     846           0 :                     result = json_token_reader_read_member_name ( &((*this_).tokenizer), member_name );
     847             :                 }
     848           0 :                 if ( U8_ERROR_NONE == result )
     849             :                 {
     850           0 :                     result = json_token_reader_expect_name_separator ( &((*this_).tokenizer) );
     851             :                 }
     852             :                 json_value_type_t v_type;
     853           0 :                 if ( U8_ERROR_NONE == result )
     854             :                 {
     855           0 :                     result = json_token_reader_get_value_type ( &((*this_).tokenizer), &v_type );
     856             :                 }
     857           0 :                 if ( U8_ERROR_NONE == result )
     858             :                 {
     859           0 :                     switch ( v_type )
     860             :                     {
     861           0 :                         case JSON_VALUE_TYPE_OBJECT:
     862             :                         {
     863           0 :                             result = U8_ERROR_PARSER_STRUCTURE; /* this function does not expect objects in objects */
     864             :                         }
     865           0 :                         break;
     866             : 
     867           0 :                         case JSON_VALUE_TYPE_ARRAY:
     868             :                         {
     869           0 :                             result = U8_ERROR_PARSER_STRUCTURE; /* this function does not expect arrays in objects */
     870             :                         }
     871           0 :                         break;
     872             : 
     873           0 :                         case JSON_VALUE_TYPE_NUMBER:
     874             :                         {
     875             :                             double parsed_number;
     876           0 :                             /* result = */ json_token_reader_read_number_value ( &((*this_).tokenizer), &parsed_number );
     877             :                             /* ignore the U8_ERROR_NOT_YET_IMPLEMENTED here... */
     878             :                         }
     879           0 :                         break;
     880             : 
     881           0 :                         case JSON_VALUE_TYPE_INTEGER:
     882             :                         {
     883             :                             int64_t parsed_integer;
     884           0 :                             result = json_token_reader_read_int_value ( &((*this_).tokenizer), &parsed_integer );
     885             :                         }
     886           0 :                         break;
     887             : 
     888           0 :                         case JSON_VALUE_TYPE_STRING:
     889             :                         {
     890           0 :                             result = json_element_reader_skip_next_string( this_ );
     891             :                         }
     892           0 :                         break;
     893             : 
     894           0 :                         case JSON_VALUE_TYPE_BOOLEAN:
     895             :                         {
     896             :                             bool parsed_bool;
     897           0 :                             result = json_token_reader_read_boolean_value ( &((*this_).tokenizer), &parsed_bool );
     898             :                         }
     899           0 :                         break;
     900             : 
     901           0 :                         case JSON_VALUE_TYPE_NULL:
     902             :                         {
     903           0 :                             result = json_token_reader_expect_null_value ( &((*this_).tokenizer) );
     904             :                         }
     905           0 :                         break;
     906             : 
     907           0 :                         case JSON_VALUE_TYPE_UNDEF:
     908             :                         default:
     909             :                         {
     910           0 :                             U8_LOG_ERROR_INT( "unexpected member name at line",
     911             :                                              json_token_reader_get_input_line( &((*this_).tokenizer) )
     912             :                                            );
     913           0 :                             result = U8_ERROR_PARSER_STRUCTURE; /* this function does not expect objects in objects */
     914             :                         }
     915           0 :                         break;
     916             :                     }
     917             :                 }
     918             :             }
     919             :         }
     920             :         else
     921             :         {
     922           0 :             U8_LOG_ERROR_INT( "unexpected character at line",
     923             :                              json_token_reader_get_input_line( &((*this_).tokenizer) )
     924             :                            );
     925           0 :             result = U8_ERROR_PARSER_STRUCTURE;
     926           0 :             object_end = true;
     927             :         }
     928             :     }
     929             : 
     930             :     /* footer */
     931             : 
     932          17 :     U8_TRACE_END_ERR( result );
     933          17 :     return result;
     934             : }
     935             : 
     936          63 : u8_error_t json_element_reader_skip_next_string ( json_element_reader_t *this_ )
     937             : {
     938          63 :     U8_TRACE_BEGIN();
     939          63 :     u8_error_t result = U8_ERROR_NONE;
     940             :     char dummy_str[4];
     941          63 :     utf8stringbuf_t dummy_strbuf = UTF8STRINGBUF ( dummy_str );
     942             : 
     943          63 :     result = json_token_reader_read_string_value ( &((*this_).tokenizer), dummy_strbuf );
     944          63 :     if ( result == U8_ERROR_STRING_BUFFER_EXCEEDED )
     945             :     {
     946             :         /* ignore this. The result string is not needed therefore dummy_str may be too small */
     947          35 :         result = U8_ERROR_NONE;
     948             :     }
     949             : 
     950          63 :     U8_TRACE_END_ERR( result );
     951          63 :     return result;
     952             : }
     953             : 
     954          18 : uint32_t json_element_reader_get_read_line ( json_element_reader_t *this_ )
     955             : {
     956          18 :     U8_TRACE_BEGIN();
     957             : 
     958          18 :     const uint32_t read_line = json_token_reader_get_input_line( &((*this_).tokenizer) );
     959          18 :     U8_TRACE_INFO_INT( "line", read_line );
     960             : 
     961          18 :     U8_TRACE_END();
     962          18 :     return read_line;
     963             : }
     964             : 
     965          22 : u8_error_t json_element_reader_get_next_feature ( json_element_reader_t *this_, data_feature_t *out_object )
     966             : {
     967          22 :     U8_TRACE_BEGIN();
     968          22 :     assert ( NULL != out_object );
     969             : 
     970          22 :     u8_error_t result = U8_ERROR_NONE;
     971             : 
     972             :     char member_name_buf[24];
     973          22 :     utf8stringbuf_t member_name = UTF8STRINGBUF( member_name_buf );
     974             : 
     975          22 :     data_feature_init_empty( out_object );
     976             : 
     977             :     /* header */
     978             : 
     979          22 :     result = json_token_reader_expect_begin_object ( &((*this_).tokenizer) );
     980             : 
     981             :     /* members */
     982             : 
     983          22 :     bool first_member_passed = false;
     984          22 :     bool object_end = false;
     985         194 :     while (( ! object_end )&&( U8_ERROR_NONE == result ))
     986             :     {
     987         172 :         result = json_token_reader_check_end_object ( &((*this_).tokenizer), &object_end );
     988         172 :         if ( U8_ERROR_NONE == result )
     989             :         {
     990         172 :             if ( ! object_end )
     991             :             {
     992         150 :                 if ( first_member_passed )
     993             :                 {
     994         128 :                     result = json_token_reader_expect_value_separator ( &((*this_).tokenizer) );
     995             :                 }
     996             :                 else
     997             :                 {
     998          22 :                     first_member_passed = true;
     999             :                 }
    1000         150 :                 if ( U8_ERROR_NONE == result )
    1001             :                 {
    1002         150 :                     result = json_token_reader_read_member_name( &((*this_).tokenizer), member_name );
    1003             :                 }
    1004         150 :                 if ( U8_ERROR_NONE == result )
    1005             :                 {
    1006         150 :                     result = json_token_reader_expect_name_separator( &((*this_).tokenizer) );
    1007             :                 }
    1008         150 :                 if ( U8_ERROR_NONE == result )
    1009             :                 {
    1010         150 :                     if ( utf8stringbuf_equals_str( member_name, JSON_CONSTANTS_KEY_FEATURE_ID ) )
    1011             :                     {
    1012             :                         int64_t parsed_integer;
    1013          22 :                         result = json_token_reader_read_int_value( &((*this_).tokenizer), &parsed_integer );
    1014          22 :                         data_feature_set_row_id ( out_object, parsed_integer );
    1015             :                     }
    1016         128 :                     else if ( utf8stringbuf_equals_str( member_name, JSON_CONSTANTS_KEY_FEATURE_MAIN_TYPE ) )
    1017             :                     {
    1018             :                         int64_t parsed_integer;
    1019          22 :                         result = json_token_reader_read_int_value( &((*this_).tokenizer), &parsed_integer );
    1020          22 :                         data_feature_set_main_type( out_object, parsed_integer );
    1021             :                     }
    1022         106 :                     else if ( utf8stringbuf_equals_str( member_name, JSON_CONSTANTS_KEY_FEATURE_MAIN_TYPE_NAME ) )
    1023             :                     {
    1024           7 :                         result = json_element_reader_skip_next_string( this_ );
    1025             :                     }
    1026          99 :                     else if ( utf8stringbuf_equals_str( member_name, JSON_CONSTANTS_KEY_FEATURE_LIST_ORDER ) )
    1027             :                     {
    1028             :                         int64_t parsed_integer;
    1029          22 :                         result = json_token_reader_read_int_value ( &((*this_).tokenizer), &parsed_integer );
    1030          22 :                         data_feature_set_list_order ( out_object, parsed_integer );
    1031             :                     }
    1032          77 :                     else if ( utf8stringbuf_equals_str( member_name, JSON_CONSTANTS_KEY_FEATURE_DESCRIPTION ) )
    1033             :                     {
    1034          22 :                         result = json_element_reader_private_read_string_array( this_, (*this_).temp_string );
    1035          22 :                         data_feature_set_description( out_object,
    1036          22 :                                                       utf8stringbuf_get_string( (*this_).temp_string )
    1037             :                                                     );
    1038             :                     }
    1039          55 :                     else if ( utf8stringbuf_equals_str( member_name, JSON_CONSTANTS_KEY_FEATURE_KEY ) )
    1040             :                     {
    1041          22 :                         result = json_token_reader_read_string_value( &((*this_).tokenizer), (*this_).temp_string );
    1042          22 :                         data_feature_set_key( out_object,
    1043          22 :                                               utf8stringbuf_get_string( (*this_).temp_string )
    1044             :                                             );
    1045             :                     }
    1046          33 :                     else if ( utf8stringbuf_equals_str( member_name, JSON_CONSTANTS_KEY_FEATURE_VALUE ) )
    1047             :                     {
    1048          22 :                         result = json_token_reader_read_string_value( &((*this_).tokenizer), (*this_).temp_string );
    1049          22 :                         data_feature_set_value( out_object,
    1050          22 :                                                 utf8stringbuf_get_string( (*this_).temp_string )
    1051             :                                               );
    1052             :                     }
    1053          11 :                     else if ( utf8stringbuf_equals_str( member_name, JSON_CONSTANTS_KEY_UUID ) )
    1054             :                     {
    1055          11 :                         result = json_token_reader_read_string_value( &((*this_).tokenizer), (*this_).temp_string );
    1056          11 :                         result |= data_feature_set_uuid( out_object,
    1057          11 :                                                          utf8stringbuf_get_string( (*this_).temp_string )
    1058             :                                                        );
    1059             :                     }
    1060             :                     else
    1061             :                     {
    1062           0 :                         U8_LOG_ERROR_INT( "unexpected member name at line",
    1063             :                                          json_token_reader_get_input_line( &((*this_).tokenizer) )
    1064             :                                        );
    1065           0 :                         result = U8_ERROR_PARSER_STRUCTURE;
    1066             :                     }
    1067             :                 }
    1068             :             }
    1069             :         }
    1070             :         else
    1071             :         {
    1072           0 :             U8_LOG_ERROR_INT( "unexpected character at line",
    1073             :                              json_token_reader_get_input_line( &((*this_).tokenizer) )
    1074             :                            );
    1075           0 :             result = U8_ERROR_PARSER_STRUCTURE;
    1076           0 :             object_end = true;
    1077             :         }
    1078             :     }
    1079             : 
    1080             :     /* footer */
    1081             : 
    1082          22 :     if ( U8_ERROR_NONE == result )
    1083             :     {
    1084          22 :         data_feature_trace( out_object );
    1085             :     }
    1086             : 
    1087          22 :     U8_TRACE_END_ERR( result );
    1088          22 :     return result;
    1089             : }
    1090             : 
    1091           7 : u8_error_t json_element_reader_get_next_diagramelement( json_element_reader_t *this_,
    1092             :                                                         data_diagramelement_t *out_object,
    1093             :                                                         utf8stringbuf_t out_node_uuid )
    1094             : {
    1095           7 :     U8_TRACE_BEGIN();
    1096           7 :     assert ( NULL != out_object );
    1097             : 
    1098           7 :     u8_error_t result = U8_ERROR_NONE;
    1099             : 
    1100             :     char member_name_buf[24];
    1101           7 :     utf8stringbuf_t member_name = UTF8STRINGBUF( member_name_buf );
    1102             : 
    1103           7 :     data_diagramelement_init_empty( out_object );
    1104             : 
    1105             :     /* header */
    1106             : 
    1107           7 :     result = json_token_reader_expect_begin_object ( &((*this_).tokenizer) );
    1108             : 
    1109             :     /* members */
    1110             : 
    1111           7 :     bool first_member_passed = false;
    1112           7 :     bool object_end = false;
    1113          77 :     while (( ! object_end )&&( U8_ERROR_NONE == result ))
    1114             :     {
    1115          70 :         result = json_token_reader_check_end_object ( &((*this_).tokenizer), &object_end );
    1116          70 :         if ( U8_ERROR_NONE == result )
    1117             :         {
    1118          70 :             if ( ! object_end )
    1119             :             {
    1120          63 :                 if ( first_member_passed )
    1121             :                 {
    1122          56 :                     result = json_token_reader_expect_value_separator ( &((*this_).tokenizer) );
    1123             :                 }
    1124             :                 else
    1125             :                 {
    1126           7 :                     first_member_passed = true;
    1127             :                 }
    1128          63 :                 if ( U8_ERROR_NONE == result )
    1129             :                 {
    1130          63 :                     result = json_token_reader_read_member_name( &((*this_).tokenizer), member_name );
    1131             :                 }
    1132          63 :                 if ( U8_ERROR_NONE == result )
    1133             :                 {
    1134          63 :                     result = json_token_reader_expect_name_separator( &((*this_).tokenizer) );
    1135             :                 }
    1136          63 :                 if ( U8_ERROR_NONE == result )
    1137             :                 {
    1138          63 :                     if ( utf8stringbuf_equals_str( member_name, JSON_CONSTANTS_KEY_DIAGRAMELEMENT_ID ) )
    1139             :                     {
    1140             :                         int64_t parsed_integer;
    1141           7 :                         result = json_token_reader_read_int_value( &((*this_).tokenizer), &parsed_integer );
    1142           7 :                         data_diagramelement_set_row_id ( out_object, parsed_integer );
    1143             :                     }
    1144          56 :                     else if ( utf8stringbuf_equals_str( member_name, JSON_CONSTANTS_KEY_DIAGRAMELEMENT_DIAGRAM_ID ) )
    1145             :                     {
    1146             :                         int64_t parsed_integer;
    1147           0 :                         result = json_token_reader_read_int_value( &((*this_).tokenizer), &parsed_integer );
    1148           0 :                         data_diagramelement_set_diagram_row_id( out_object, parsed_integer );
    1149             :                     }
    1150          56 :                     else if ( utf8stringbuf_equals_str( member_name, JSON_CONSTANTS_KEY_DIAGRAMELEMENT_CLASSIFIER_ID ) )
    1151             :                     {
    1152             :                         int64_t parsed_integer;
    1153           7 :                         result = json_token_reader_read_int_value ( &((*this_).tokenizer), &parsed_integer );
    1154           7 :                         data_diagramelement_set_classifier_row_id ( out_object, parsed_integer );
    1155             :                     }
    1156          49 :                     else if ( utf8stringbuf_equals_str( member_name, JSON_CONSTANTS_KEY_DIAGRAMELEMENT_CLASSIFIER_NAME ) )
    1157             :                     {
    1158           7 :                         result = json_element_reader_skip_next_string( this_ );
    1159             :                     }
    1160          42 :                     else if ( utf8stringbuf_equals_str( member_name, JSON_CONSTANTS_KEY_DIAGRAMELEMENT_FOCUSED_FEATURE_ID ) )
    1161             :                     {
    1162             :                         int64_t parsed_integer;
    1163           7 :                         result = json_token_reader_read_int_value ( &((*this_).tokenizer), &parsed_integer );
    1164           7 :                         data_diagramelement_set_focused_feature_row_id ( out_object, parsed_integer );
    1165             :                     }
    1166          35 :                     else if ( utf8stringbuf_equals_str( member_name, JSON_CONSTANTS_KEY_DIAGRAMELEMENT_FOCUSED_FEATURE_NAME ) )
    1167             :                     {
    1168           7 :                         result = json_element_reader_skip_next_string( this_ );
    1169             :                     }
    1170          28 :                     else if ( utf8stringbuf_equals_str( member_name, JSON_CONSTANTS_KEY_DIAGRAMELEMENT_DISPLAY_FLAGS ) )
    1171             :                     {
    1172             :                         int64_t parsed_integer;
    1173           7 :                         result = json_token_reader_read_int_value ( &((*this_).tokenizer), &parsed_integer );
    1174           7 :                         data_diagramelement_set_display_flags ( out_object, parsed_integer );
    1175             :                     }
    1176          21 :                     else if ( utf8stringbuf_equals_str( member_name, JSON_CONSTANTS_KEY_DIAGRAMELEMENT_DISPLAY_FLAG_NAMES ) )
    1177             :                     {
    1178           7 :                         result = json_element_reader_skip_next_string( this_ );
    1179             :                     }
    1180          14 :                     else if ( utf8stringbuf_equals_str( member_name, JSON_CONSTANTS_KEY_DIAGRAMELEMENT_NODE ) )
    1181             :                     {
    1182           7 :                         result = json_token_reader_read_string_value( &((*this_).tokenizer), out_node_uuid );
    1183             :                     }
    1184           7 :                     else if ( utf8stringbuf_equals_str( member_name, JSON_CONSTANTS_KEY_UUID ) )
    1185             :                     {
    1186           7 :                         result = json_token_reader_read_string_value( &((*this_).tokenizer), (*this_).temp_string );
    1187           7 :                         result |= data_diagramelement_set_uuid( out_object,
    1188           7 :                                                                 utf8stringbuf_get_string( (*this_).temp_string )
    1189             :                                                               );
    1190             :                     }
    1191             :                     else
    1192             :                     {
    1193           0 :                         U8_LOG_ERROR_INT( "unexpected member name at line",
    1194             :                                          json_token_reader_get_input_line( &((*this_).tokenizer) )
    1195             :                                        );
    1196           0 :                         result = U8_ERROR_PARSER_STRUCTURE;
    1197             :                     }
    1198             :                 }
    1199             :             }
    1200             :         }
    1201             :         else
    1202             :         {
    1203           0 :             U8_LOG_ERROR_INT( "unexpected character at line",
    1204             :                              json_token_reader_get_input_line( &((*this_).tokenizer) )
    1205             :                            );
    1206           0 :             result = U8_ERROR_PARSER_STRUCTURE;
    1207           0 :             object_end = true;
    1208             :         }
    1209             :     }
    1210             : 
    1211             :     /* footer */
    1212             : 
    1213           7 :     if ( U8_ERROR_NONE == result )
    1214             :     {
    1215           7 :         data_diagramelement_trace( out_object );
    1216             :     }
    1217             : 
    1218           7 :     U8_TRACE_END_ERR( result );
    1219           7 :     return result;
    1220             : }
    1221             : 
    1222          57 : u8_error_t json_element_reader_private_read_string_array ( json_element_reader_t *this_,
    1223             :                                                            utf8stringbuf_t out_joined_string )
    1224             : {
    1225          57 :     U8_TRACE_BEGIN();
    1226          57 :     u8_error_t result = U8_ERROR_NONE;
    1227             : 
    1228          57 :     utf8stringbuf_clear( out_joined_string );
    1229             : 
    1230          57 :     result = json_token_reader_expect_begin_array( &((*this_).tokenizer) );
    1231             : 
    1232          57 :     bool end_array = false;
    1233          57 :     bool first_element_passed = false;
    1234         173 :     while (( ! end_array )&&( U8_ERROR_NONE == result ))
    1235             :     {
    1236         116 :         result = json_token_reader_check_end_array( &((*this_).tokenizer), &end_array );
    1237         116 :         if ( U8_ERROR_NONE == result )
    1238             :         {
    1239         116 :             if ( ! end_array )
    1240             :             {
    1241          59 :                 if ( first_element_passed )
    1242             :                 {
    1243          14 :                     result = json_token_reader_expect_value_separator ( &((*this_).tokenizer) );
    1244             :                 }
    1245             :                 else
    1246             :                 {
    1247          45 :                     first_element_passed = true;
    1248             :                 }
    1249          59 :                 utf8stringbuf_t unused_remaining = utf8stringbuf_get_end( out_joined_string );
    1250          59 :                 result |= json_token_reader_read_string_value( &((*this_).tokenizer), unused_remaining );
    1251             :             }
    1252             :         }
    1253             :         else
    1254             :         {
    1255             :             /* error, break loop */
    1256           0 :             U8_LOG_ERROR_INT( "unexpected array contents at line",
    1257             :                              json_token_reader_get_input_line( &((*this_).tokenizer) )
    1258             :                            );
    1259             :         }
    1260             :     }
    1261             : 
    1262          57 :     U8_TRACE_END_ERR( result );
    1263          57 :     return result;
    1264             : }
    1265             : 
    1266             : 
    1267             : /*
    1268             : Copyright 2016-2024 Andreas Warnke
    1269             : 
    1270             : Licensed under the Apache License, Version 2.0 (the "License");
    1271             : you may not use this file except in compliance with the License.
    1272             : You may obtain a copy of the License at
    1273             : 
    1274             :     http://www.apache.org/licenses/LICENSE-2.0
    1275             : 
    1276             : Unless required by applicable law or agreed to in writing, software
    1277             : distributed under the License is distributed on an "AS IS" BASIS,
    1278             : WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    1279             : See the License for the specific language governing permissions and
    1280             : limitations under the License.
    1281             : */

Generated by: LCOV version 1.16