Files
ci-libretro-fceumm/src/boards/fifo.c
2025-09-12 19:58:52 +02:00

44 lines
1.0 KiB
C

#include "mapinc.h"
#include <stdio.h>
#include <stdlib.h>
#include "fifo.h"
size_t FIFO_size (FIFO *fifo) {
fifo->front %= fifo->capacity;
fifo->back %= fifo->capacity;
return (fifo->back -fifo->front +fifo->capacity) %fifo->capacity;
}
uint8 FIFO_halfFull (FIFO *fifo) {
return FIFO_size(fifo) >= fifo->capacity /2;
}
int FIFO_retrieve (FIFO *fifo) {
fifo->front %= fifo->capacity;
return FIFO_size(fifo)? fifo->data[fifo->front++]: 0;
}
void FIFO_add (FIFO *fifo, uint8 value) {
fifo->back %= fifo->capacity;
if (FIFO_size(fifo) <fifo->capacity) fifo->data[fifo->back++] = value;
}
void FIFO_reset (FIFO *fifo) {
fifo->front = fifo->back = 0;
}
void FIFO_init (FIFO *fifo, size_t newCapacity) {
fifo->capacity = newCapacity;
fifo->data = (uint8*)FCEU_gmalloc(newCapacity);
AddExState(fifo->data, fifo->capacity, 0, "FIFD");
AddExState(&fifo->front, 2, 0, "FIFF");
AddExState(&fifo->back, 2, 0, "FIFB");
}
void FIFO_close (FIFO *fifo) {
if (fifo->data) {
free(fifo->data);
fifo->data = NULL;
}
}