Line data Source code
1 : /* File: utf8stream_writemem.c; Copyright and License: see below */ 2 : 3 : #include "u8/u8_trace.h" 4 : #include <string.h> 5 : #include <inttypes.h> 6 : #include <assert.h> 7 : 8 4 : static inline void utf8stream_writemem_init( utf8stream_writemem_t *this_, void* mem_buf_start, size_t mem_buf_size ) 9 : { 10 4 : assert( mem_buf_start != NULL ); 11 4 : assert( mem_buf_size != 0 ); 12 4 : universal_memory_output_stream_init( &((*this_).mem_output), 13 : mem_buf_start, 14 : mem_buf_size, 15 : UNIVERSAL_MEMORY_OUTPUT_STREAM_0TERM_UTF8 16 : ); 17 4 : utf8stream_writer_init( &((*this_).writer), 18 : universal_memory_output_stream_get_output_stream( &((*this_).mem_output) ) 19 : ); 20 4 : (*this_).lazy_err = U8_ERROR_NONE; 21 4 : } 22 : 23 4 : static inline u8_error_t utf8stream_writemem_destroy( utf8stream_writemem_t *this_ ) 24 : { 25 4 : u8_error_t err = (*this_).lazy_err; 26 4 : err |= utf8stream_writer_destroy( &((*this_).writer) ); 27 : /* avoid duplicate flush; therefore do not call */ 28 : /* err |= universal_memory_output_stream_destroy( &((*this_).mem_output) ); */ 29 4 : return err; 30 : } 31 : 32 262 : static inline u8_error_t utf8stream_writemem_reset ( utf8stream_writemem_t *this_ ) 33 : { 34 262 : u8_error_t err = (*this_).lazy_err; 35 262 : (*this_).lazy_err = U8_ERROR_NONE; 36 262 : err |= utf8stream_writer_flush( &((*this_).writer) ); 37 262 : err |= universal_memory_output_stream_reset( &((*this_).mem_output) ); 38 262 : return err; 39 : } 40 : 41 263 : static inline utf8stream_writer_t * utf8stream_writemem_get_writer( utf8stream_writemem_t *this_ ) 42 : { 43 263 : return &((*this_).writer); 44 : } 45 : 46 256 : static inline utf8stringview_t utf8stream_writemem_get_view( utf8stream_writemem_t *this_ ) 47 : { 48 256 : (*this_).lazy_err |= utf8stream_writer_flush( &((*this_).writer) ); 49 : 50 256 : const void* start = universal_memory_output_stream_get_start( &((*this_).mem_output) ); 51 256 : const size_t length = universal_memory_output_stream_get_fill( &((*this_).mem_output) ); 52 : 53 256 : return UTF8STRINGVIEW( start, length ); 54 : } 55 : 56 6 : static inline utf8string_t * utf8stream_writemem_get_string( utf8stream_writemem_t *this_ ) 57 : { 58 6 : (*this_).lazy_err |= utf8stream_writer_flush( &((*this_).writer) ); 59 : 60 6 : const void* start = universal_memory_output_stream_get_start( &((*this_).mem_output) ); 61 : 62 6 : return start; 63 : } 64 : 65 : 66 : /* 67 : Copyright 2024-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 : */