#ifndef TSL_BUFFER_H #define TSL_BUFFER_H #include /* TODO: Optimize small size buffers by using data and size members (16 bytes on x86) instead of heap allocation */ typedef struct { void *data; size_t size; size_t capacity; } TslBuffer; void tsl_buffer_init(TslBuffer *self); void tsl_buffer_deinit(TslBuffer *self); int tsl_buffer_append(TslBuffer *self, const void *data, size_t size); /* This function changes the size of the buffer without changing the capacity and returns the value at the back of the buffer, which is valid until @tsl_buffer_append or @tsl_buffer_deinit is called. The buffer size has to be larger or equal to @size. */ void* tsl_buffer_pop(TslBuffer *self, size_t size); void* tsl_buffer_begin(TslBuffer *self); void* tsl_buffer_end(TslBuffer *self); void tsl_buffer_move(TslBuffer *dst, TslBuffer *src); #endif /* TSL_BUFFER_H */