orca/milepost/src/util/ringbuffer.h

45 lines
1016 B
C

/************************************************************//**
*
* @file: ringbuffer.h
* @author: Martin Fouilleul
* @date: 31/07/2022
* @revision:
*
*****************************************************************/
#ifndef __RINGBUFFER_H_
#define __RINGBUFFER_H_
#include"typedefs.h"
#include"atomic.h"
#ifdef __cplusplus
extern "C" {
#endif
typedef struct ringbuffer
{
u64 mask;
_Atomic(u64) readIndex;
_Atomic(u64) writeIndex;
u64 reserveIndex;
u8* buffer;
} ringbuffer;
void ringbuffer_init(ringbuffer* ring, u8 capExp);
void ringbuffer_cleanup(ringbuffer* ring);
u64 ringbuffer_read_available(ringbuffer* ring);
u64 ringbuffer_write_available(ringbuffer* ring);
u64 ringbuffer_read(ringbuffer* ring, u64 size, u8* data);
u64 ringbuffer_write(ringbuffer* ring, u64 size, u8* data);
u64 ringbuffer_reserve(ringbuffer* ring, u64 size, u8* data);
void ringbuffer_commit(ringbuffer* ring);
void ringbuffer_rewind(ringbuffer* ring);
#ifdef __cplusplus
} // extern "C"
#endif
#endif //__RINGBUFFER_H_