#ifndef JEMALLOC_INTERNAL_BUF_WRITER_H #define JEMALLOC_INTERNAL_BUF_WRITER_H #include "jemalloc/internal/jemalloc_preamble.h" #include "jemalloc/internal/jemalloc_internal_types.h" #include "jemalloc/internal/tsd_types.h" /* * Note: when using the buffered writer, cbopaque is passed to write_cb only * when the buffer is flushed. It would make a difference if cbopaque points * to something that's changing for each write_cb call, or something that * affects write_cb in a way dependent on the content of the output string. * However, the most typical usage case in practice is that cbopaque points to * some "option like" content for the write_cb, so it doesn't matter. */ typedef struct { write_cb_t *write_cb; void *cbopaque; char *buf; size_t buf_size; size_t buf_end; bool internal_buf; } buf_writer_t; bool buf_writer_init(tsdn_t *tsdn, buf_writer_t *buf_writer, write_cb_t *write_cb, void *cbopaque, char *buf, size_t buf_len); void buf_writer_flush(buf_writer_t *buf_writer); write_cb_t buf_writer_cb; void buf_writer_terminate(tsdn_t *tsdn, buf_writer_t *buf_writer); typedef ssize_t (read_cb_t)(void *read_cbopaque, void *buf, size_t limit); void buf_writer_pipe(buf_writer_t *buf_writer, read_cb_t *read_cb, void *read_cbopaque); #endif /* JEMALLOC_INTERNAL_BUF_WRITER_H */