sst-linux/drivers/sst/boundedbuffer.c
2025-05-12 18:33:41 +02:00

41 lines
888 B
C

#include "sst_internal.h"
//this is diabloical
#define OFFSET 0
void init_bbuffer(struct boundedbuffer *buffer) {
buffer->next_in = 0;
buffer->next_out = 0;
buffer->size = BOUNDEDBUFFER_SIZE;
}
int is_full(struct boundedbuffer *buffer) {
return (buffer->next_in + 1) % buffer->size == buffer->next_out;
}
int is_empty(struct boundedbuffer *buffer) {
return buffer->next_out == buffer->next_in;
}
int produce(struct boundedbuffer *buffer, BOUNDEDBUFFER_STORAGE_TYPE data) {
if (is_full(buffer)) {
return -1;
}
buffer->data[buffer->next_in + OFFSET] = data;
buffer->next_in = (buffer->next_in + 1) % buffer->size;
return 0;
}
int consume(struct boundedbuffer *buffer, BOUNDEDBUFFER_STORAGE_TYPE *ret) {
if (is_empty(buffer)) {
return -1;
}
*ret = buffer->data[buffer->next_out + OFFSET];
buffer->next_out = (buffer->next_out + 1) % buffer->size;
return 0;
}