#ifndef H_SATORI_BUFFER #define H_SATORI_BUFFER #include #include #include #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