Files
CuboBmsFirmware/Core/Inc/libRingbuffer.h
Yury Shuvakin 190522943f Initial commit
2023-03-29 20:05:40 +03:00

56 lines
2.0 KiB
C

#ifndef RingBuf_h
#define RingBuf_h
#include <stdint.h>
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//https://github.com/wizard97/ArduinoRingBuffer
typedef struct libRingBufferTypedef libRingBufferTypedef;
typedef struct libRingBufferTypedef {
// Invariant: end and start is always in bounds
unsigned char *buf;
unsigned int len, size, start, end, elements;
// Private:
int (*next_end_index) (libRingBufferTypedef*);
int (*incr_end_index) (libRingBufferTypedef*);
int (*incr_start_index) (libRingBufferTypedef*);
//public:
// Returns true if full
bool (*isFull) (libRingBufferTypedef*);
// Returns true if empty
bool (*isEmpty) (libRingBufferTypedef*);
// Returns number of elemnts in buffer
unsigned int (*numElements)(libRingBufferTypedef*);
// Add Event, Returns index where added in buffer, -1 on full buffer
int (*add) (libRingBufferTypedef*, const void*);
// Returns pointer to nth element, NULL when nth element is empty
void *(*peek) (libRingBufferTypedef*, unsigned int);
// Removes element and copies it to location pointed to by void *
// Returns pointer passed in, NULL on empty buffer
void *(*pull) (libRingBufferTypedef*, void *);
} libRingBufferTypedef;
libRingBufferTypedef *libRingBufferNew(int size, int len);
int libRingBufferInit(libRingBufferTypedef *self, int size, int len);
int libRingBufferDelete(libRingBufferTypedef *self);
int libRingBufferNextEndIndex(libRingBufferTypedef *self);
int libRingBufferIncrEnd(libRingBufferTypedef *self);
int libRingBufferIncrStart(libRingBufferTypedef *self);
int libRingBufferAdd(libRingBufferTypedef *self, const void *object);
void *libRingBufferPeek(libRingBufferTypedef *self, unsigned int num);
void *libRingBufferPull(libRingBufferTypedef *self, void *object);
bool libRingBufferIsFull(libRingBufferTypedef *self);
bool libRingBufferIsEmpty(libRingBufferTypedef *self);
unsigned int libRingBufferNumElements(libRingBufferTypedef *self);
#endif