#pragma once #include #include #include #include #include #include "fumotris.h" typedef const struct RingBufferT { size_t OFFSET; size_t SIZE; size_t LEN; } *const RingBufferT; struct RingBufferHead { size_t len; size_t start; }; #define RINGBUF_HEAD_INIT ((struct RingBufferHead) { 0, 0 }) size_t RingBufferEmpty(RingBufferT T, struct RingBufferHead *head); void *RingBufferGet( RingBufferT T, struct RingBufferHead *head, size_t i ); void *RingBufferNext(RingBufferT T, struct RingBufferHead *head); void RingBufferAdd(RingBufferT T, struct RingBufferHead *dest, void *item); void RingBufferTransfer( RingBufferT T, struct RingBufferHead *dest, struct RingBufferHead *tmp ); size_t RingBufferOut( RingBufferT T, size_t n, void *dest, struct RingBufferHead *src );