LCOV - code coverage report
Current view: top level - u8stream/include/utf8stringbuf - utf8stringviewiterator.inl (source / functions) Hit Total Coverage
Test: crystal-facet-uml_v1.57.0_covts Lines: 32 32 100.0 %
Date: 2024-04-07 11:14:42 Functions: 5 5 100.0 %

          Line data    Source code
       1             : /* File: utf8stringviewiterator.inl; Copyright and License: see below */
       2             : 
       3             : #ifdef __cplusplus
       4             : extern "C" {
       5             : #endif
       6             : 
       7           5 : static inline void utf8stringviewiterator_init ( utf8stringviewiterator_t *this_, const utf8stringview_t *element_list, utf8string_t *separator )
       8             : {
       9           5 :     assert( element_list != NULL );
      10           5 :     assert( separator != NULL );
      11           5 :     (*this_).remaining = *element_list;
      12           5 :     (*this_).separator = separator;
      13           5 :     (*this_).next_is_end = false;
      14           5 :     (*this_).has_next = true;
      15           5 :     utf8stringviewiterator_private_step_to_next( this_ );
      16           5 : }
      17             : 
      18           5 : static inline void utf8stringviewiterator_destroy ( utf8stringviewiterator_t *this_ )
      19             : {
      20           5 : }
      21             : 
      22          15 : static inline bool utf8stringviewiterator_has_next ( const utf8stringviewiterator_t *this_ )
      23             : {
      24          15 :     return (*this_).has_next;
      25             : }
      26             : 
      27          15 : static inline utf8stringview_t utf8stringviewiterator_next ( utf8stringviewiterator_t *this_ )
      28             : {
      29          15 :     utf8stringview_t result = (*this_).next;
      30          15 :     utf8stringviewiterator_private_step_to_next( this_ );
      31          15 :     return result;
      32             : }
      33             : 
      34          20 : static inline void utf8stringviewiterator_private_step_to_next ( utf8stringviewiterator_t *this_ )
      35             : {
      36          20 :     if ( (*this_).next_is_end )
      37             :     {
      38          10 :         (*this_).has_next = false;
      39          10 :         (*this_).next = UTF8STRINGVIEW_EMPTY;
      40             :     }
      41             :     else
      42             :     {
      43          10 :         utf8stringview_t before = UTF8STRINGVIEW_EMPTY;
      44          10 :         utf8stringview_t after = UTF8STRINGVIEW_EMPTY;
      45             :         const utf8error_t has_next
      46          10 :             = utf8stringview_split_at_first_str( &((*this_).remaining), (*this_).separator, &before, &after );
      47          10 :         if (( has_next != UTF8ERROR_SUCCESS )||( utf8string_get_length( (*this_).separator ) == 0 ))
      48           5 :         {
      49           5 :             (*this_).next_is_end = true;
      50           5 :             (*this_).next = (*this_).remaining;
      51           5 :             (*this_).remaining = UTF8STRINGVIEW_EMPTY;
      52             :         }
      53             :         else
      54             :         {
      55           5 :             (*this_).next = before;
      56           5 :             (*this_).remaining = after;
      57             :         }
      58             :     }
      59          20 : }
      60             : 
      61             : #ifdef __cplusplus
      62             : }
      63             : #endif
      64             : 
      65             : 
      66             : /*
      67             : Copyright 2021-2024 Andreas Warnke
      68             : 
      69             : Licensed under the Apache License, Version 2.0 (the "License");
      70             : you may not use this file except in compliance with the License.
      71             : You may obtain a copy of the License at
      72             : 
      73             :     http://www.apache.org/licenses/LICENSE-2.0
      74             : 
      75             : Unless required by applicable law or agreed to in writing, software
      76             : distributed under the License is distributed on an "AS IS" BASIS,
      77             : WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      78             : See the License for the specific language governing permissions and
      79             : limitations under the License.
      80             : */

Generated by: LCOV version 1.16