#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, u8* data, size_t n); 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(I8, i8); BUFFER_READ_WRITE(I16, i16); BUFFER_READ_WRITE(I32, i32); BUFFER_READ_WRITE(I64, i64); BUFFER_READ_WRITE(U8, u8); BUFFER_READ_WRITE(U16, u16); BUFFER_READ_WRITE(U32, u32); BUFFER_READ_WRITE(U64, u64); bool bufferIsEmpty(const Buffer* b); size_t bufferGetReadIndex(const Buffer* b); void bufferSetReadIndex(Buffer* b, size_t n); size_t bufferGetWriteIndex(const Buffer* b); void bufferSetWriteIndex(Buffer* b, size_t n); #endif