blob: b5c36bf38e8141bef57eb23e9d45203d4cb55061 [file] [log] [blame]
//===-- Writer definition for printf ----------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
#ifndef LLVM_LIBC_SRC_STDIO_PRINTF_CORE_WRITER_H
#define LLVM_LIBC_SRC_STDIO_PRINTF_CORE_WRITER_H
#include "src/__support/CPP/string_view.h"
#include <stddef.h>
namespace __llvm_libc {
namespace printf_core {
using WriteStrFunc = int (*)(void *, cpp::string_view);
using WriteCharsFunc = int (*)(void *, char, size_t);
using WriteCharFunc = int (*)(void *, char);
class Writer final {
// output is a pointer to the string or file that the writer is meant to write
// to.
void *output;
// raw_write is a function that, when called on output with a char* and
// length, will copy the number of bytes equal to the length from the char*
// onto the end of output. It should return a positive number or zero on
// success, or a negative number on failure.
WriteStrFunc str_write;
WriteCharsFunc chars_write;
WriteCharFunc char_write;
int chars_written = 0;
public:
Writer(void *init_output, WriteStrFunc init_str_write,
WriteCharsFunc init_chars_write, WriteCharFunc init_char_write)
: output(init_output), str_write(init_str_write),
chars_write(init_chars_write), char_write(init_char_write) {}
// write will copy new_string into output using str_write. It increments
// chars_written by the length of new_string. It returns the result of
// str_write.
int write(cpp::string_view new_string);
// this version of write will copy length copies of new_char into output using
// chars_write. This is primarily used for padding. It returns the result of
// chars_write.
int write(char new_char, size_t len);
// this version of write will copy just new_char into output. This is often
// used for negative signs. It returns the result of chars_write.
int write(char new_char);
int get_chars_written() { return chars_written; }
};
} // namespace printf_core
} // namespace __llvm_libc
#endif // LLVM_LIBC_SRC_STDIO_PRINTF_CORE_WRITER_H