1 //===-- Writer definition for printf ----------------------------*- C++ -*-===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 9 #ifndef LLVM_LIBC_SRC_STDIO_PRINTF_CORE_WRITER_H 10 #define LLVM_LIBC_SRC_STDIO_PRINTF_CORE_WRITER_H 11 12 #include <stddef.h> 13 14 namespace __llvm_libc { 15 namespace printf_core { 16 17 using WriteFunc = void (*)(void *, const char *__restrict, size_t); 18 19 class Writer final { 20 // output is a pointer to the string or file that the writer is meant to write 21 // to. 22 void *output; 23 24 // raw_write is a function that, when called on output with a char* and 25 // length, will copy the number of bytes equal to the length from the char* 26 // onto the end of output. 27 WriteFunc raw_write; 28 29 unsigned long long chars_written = 0; 30 31 public: 32 Writer(void *init_output, WriteFunc init_raw_write) 33 : output(init_output), raw_write(init_raw_write) {} 34 35 // write will copy length bytes from new_string into output using 36 // raw_write, unless that would cause more bytes than max_length to be 37 // written. It always increments chars_written by length. 38 void write(const char *new_string, size_t length); 39 40 // write_chars will copy length copies of new_char into output using raw_write 41 // unless that would cause more bytes than max_length to be written. It always 42 // increments chars_written by length. 43 void write_chars(char new_char, size_t length); 44 45 unsigned long long get_chars_written() { return chars_written; } 46 }; 47 48 } // namespace printf_core 49 } // namespace __llvm_libc 50 51 #endif // LLVM_LIBC_SRC_STDIO_PRINTF_CORE_WRITER_H 52