Line data Source code
1 : /* File: utf8codepointiterator.inl; Copyright and License: see below */
2 :
3 : #ifdef __cplusplus
4 : extern "C" {
5 : #endif
6 :
7 259 : static inline void utf8codepointiterator_init ( utf8codepointiterator_t *this_, const utf8stringview_t *stringview )
8 : {
9 259 : (*this_).remaining = *stringview;
10 259 : utf8codepointiterator_private_step_to_next( this_ );
11 259 : }
12 :
13 259 : static inline void utf8codepointiterator_destroy ( utf8codepointiterator_t *this_ )
14 : {
15 259 : }
16 :
17 4105 : static inline bool utf8codepointiterator_has_next ( const utf8codepointiterator_t *this_ )
18 : {
19 4105 : return utf8codepoint_is_valid( &((*this_).next) );
20 : }
21 :
22 3849 : static inline utf8codepoint_t utf8codepointiterator_next ( utf8codepointiterator_t *this_ )
23 : {
24 3849 : utf8codepoint_t result = (*this_).next;
25 3849 : utf8codepointiterator_private_step_to_next( this_ );
26 3849 : return result;
27 : }
28 :
29 4108 : static inline void utf8codepointiterator_private_step_to_next ( utf8codepointiterator_t *this_ )
30 : {
31 4108 : const size_t remaining_len = utf8stringview_get_length( &((*this_).remaining) );
32 4108 : if ( remaining_len == 0 )
33 : {
34 262 : (*this_).next = UTF8CODEPOINT_INVAL_CHAR;
35 : }
36 : else
37 : {
38 3846 : (*this_).next = utf8codepoint_new( utf8stringview_get_start( &((*this_).remaining) ), remaining_len );
39 3846 : if ( utf8codepoint_is_valid( &((*this_).next) ) )
40 : {
41 3845 : const unsigned int next_len = utf8codepoint_get_length( &((*this_).next) );
42 : (*this_).remaining
43 3845 : = UTF8STRINGVIEW( utf8stringview_get_start( &((*this_).remaining) ) + next_len,
44 : (remaining_len - next_len )
45 : );
46 : }
47 : else
48 : {
49 1 : (*this_).remaining = UTF8STRINGVIEW_EMPTY;
50 : }
51 : }
52 4108 : }
53 :
54 : #ifdef __cplusplus
55 : }
56 : #endif
57 :
58 :
59 : /*
60 : Copyright 2021-2025 Andreas Warnke
61 :
62 : Licensed under the Apache License, Version 2.0 (the "License");
63 : you may not use this file except in compliance with the License.
64 : You may obtain a copy of the License at
65 :
66 : http://www.apache.org/licenses/LICENSE-2.0
67 :
68 : Unless required by applicable law or agreed to in writing, software
69 : distributed under the License is distributed on an "AS IS" BASIS,
70 : WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
71 : See the License for the specific language governing permissions and
72 : limitations under the License.
73 : */
|