(FIFO queue) Turn some functions into static inline functions

This commit is contained in:
twinaphex 2017-04-20 20:28:57 +02:00
parent 75e02c4646
commit 0215badb4c
2 changed files with 39 additions and 53 deletions

View File

@ -27,24 +27,50 @@
#include <stddef.h>
#include <retro_common_api.h>
#include <retro_inline.h>
RETRO_BEGIN_DECLS
struct fifo_buffer
{
uint8_t *buffer;
size_t size;
size_t first;
size_t end;
};
typedef struct fifo_buffer fifo_buffer_t;
fifo_buffer_t *fifo_new(size_t size);
void fifo_clear(fifo_buffer_t *buffer);
static INLINE void fifo_clear(fifo_buffer_t *buffer)
{
buffer->first = 0;
buffer->end = 0;
}
void fifo_write(fifo_buffer_t *buffer, const void *in_buf, size_t size);
void fifo_read(fifo_buffer_t *buffer, void *in_buf, size_t size);
void fifo_free(fifo_buffer_t *buffer);
static INLINE void fifo_free(fifo_buffer_t *buffer)
{
if (!buffer)
return;
size_t fifo_read_avail(fifo_buffer_t *buffer);
free(buffer->buffer);
free(buffer);
}
size_t fifo_write_avail(fifo_buffer_t *buffer);
static INLINE size_t fifo_read_avail(fifo_buffer_t *buffer)
{
return (buffer->end + ((buffer->end < buffer->first) ? buffer->size : 0)) - buffer->first;
}
static INLINE size_t fifo_write_avail(fifo_buffer_t *buffer)
{
return (buffer->size - 1) - ((buffer->end + ((buffer->end < buffer->first) ? buffer->size : 0)) - buffer->first);
}
RETRO_END_DECLS

View File

@ -25,68 +25,28 @@
#include <queues/fifo_queue.h>
struct fifo_buffer
{
uint8_t *buffer;
size_t size;
size_t first;
size_t end;
};
fifo_buffer_t *fifo_new(size_t size)
{
uint8_t *buffer = NULL;
fifo_buffer_t *buf = (fifo_buffer_t*)calloc(1, sizeof(*buf));
if (!buf)
return NULL;
buf->buffer = (uint8_t*)calloc(1, size + 1);
if (!buf->buffer)
buffer = (uint8_t*)calloc(1, size + 1);
if (!buffer)
{
free(buf);
return NULL;
}
buf->size = size + 1;
buf->buffer = buffer;
buf->size = size + 1;
return buf;
}
void fifo_clear(fifo_buffer_t *buffer)
{
buffer->first = 0;
buffer->end = 0;
}
void fifo_free(fifo_buffer_t *buffer)
{
if (!buffer)
return;
free(buffer->buffer);
free(buffer);
}
size_t fifo_read_avail(fifo_buffer_t *buffer)
{
size_t first = buffer->first;
size_t end = buffer->end;
if (end < first)
end += buffer->size;
return end - first;
}
size_t fifo_write_avail(fifo_buffer_t *buffer)
{
size_t first = buffer->first;
size_t end = buffer->end;
if (end < first)
end += buffer->size;
return (buffer->size - 1) - (end - first);
}
void fifo_write(fifo_buffer_t *buffer, const void *in_buf, size_t size)
{
size_t first_write = size;
@ -95,7 +55,7 @@ void fifo_write(fifo_buffer_t *buffer, const void *in_buf, size_t size)
if (buffer->end + size > buffer->size)
{
first_write = buffer->size - buffer->end;
rest_write = size - first_write;
rest_write = size - first_write;
}
memcpy(buffer->buffer + buffer->end, in_buf, first_write);
@ -113,7 +73,7 @@ void fifo_read(fifo_buffer_t *buffer, void *in_buf, size_t size)
if (buffer->first + size > buffer->size)
{
first_read = buffer->size - buffer->first;
rest_read = size - first_read;
rest_read = size - first_read;
}
memcpy(in_buf, (const uint8_t*)buffer->buffer + buffer->first, first_read);