permanent-satori-hole/include/buffer.h
2023-12-27 01:35:22 +01:00

41 lines
1.1 KiB
C

#ifndef H_SATORI_BUFFER
#define H_SATORI_BUFFER
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
#define SAT_BUFFER_PIECE_SIZE (1024)
#define SAT_BUFFER_PIECE_MAX (SAT_BUFFER_PIECE_SIZE - 1)
typedef struct _sat_buffer_piece {
struct _sat_buffer_piece *next;
char data[SAT_BUFFER_PIECE_SIZE];
} sat_buffer_piece, *sat_buffer_piece_ptr;
typedef struct _sat_buffer {
size_t available;
sat_buffer_piece_ptr start;
size_t rPos;
sat_buffer_piece_ptr rCurrent;
size_t wPos;
sat_buffer_piece_ptr wCurrent;
} sat_buffer, *sat_buffer_ptr;
sat_buffer_ptr sat_buffer_alloc(void);
void sat_buffer_free(sat_buffer_ptr buffer);
bool sat_buffer_pending(sat_buffer_ptr buffer);
size_t sat_buffer_available(sat_buffer_ptr buffer);
void sat_buffer_tidy(sat_buffer_ptr buffer);
int sat_buffer_write(sat_buffer_ptr buffer, char *source, size_t count);
void sat_buffer_putc(sat_buffer_ptr buffer, char value);
int sat_buffer_read(sat_buffer_ptr buffer, char *target, size_t length);
char sat_buffer_getc(sat_buffer_ptr buffer);
#endif // H_SATORI_BUFFER