45 lines
1016 B
C
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_
|