#ifndef BASIC_BUFFER_H #define BASIC_BUFFER_H #include "Types.h" typedef struct { u8* data; size_t maxIndex; size_t readIndex; size_t writeIndex; } Buffer; void bufferInit(Buffer* b); void bufferDestroy(Buffer* b); void bufferReset(Buffer* b); [[nodiscard]] bool bufferWrite(Buffer* b, const void* p, size_t n); [[nodiscard]] bool bufferRead(Buffer* b, void* p, size_t n); #define BUFFER_READ_WRITE(Type, type) \ [[nodiscard]] bool bufferWrite##Type(Buffer* b, type t); \ [[nodiscard]] bool bufferRead##Type(Buffer* b, type* t) BUFFER_READ_WRITE(I32, i32); BUFFER_READ_WRITE(U8, u8); [[nodiscard]] bool bufferWriteString(Buffer* b, const char* s); const char* bufferReadString(Buffer* b); #endif