46 lines
890 B
C
46 lines
890 B
C
#pragma once
|
|
#include <iso646.h>
|
|
#include <stdbool.h>
|
|
#include <stdint.h>
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
|
|
#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
|
|
); |