From: Bastian Dehn Date: Sun, 24 Apr 2022 14:33:20 +0000 (+0200) Subject: incomplete ringbuffer X-Git-Url: https://gitweb.hhaalo.de/?a=commitdiff_plain;h=d8e57fdd3ea842af2e30d85325eb992c5610f645;p=ringbuffer.git incomplete ringbuffer --- diff --git a/CMakeLists.txt b/CMakeLists.txt index 2eeaaa0..2accbcd 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,4 +2,4 @@ cmake_minimum_required(VERSION 3.18.4) project(ringbuffer) -add_executable(ringbuffer ringbuffer.c) +add_executable(ringbuffer demo.c ringbuffer.c) diff --git a/demo.c b/demo.c new file mode 100644 index 0000000..5078cfd --- /dev/null +++ b/demo.c @@ -0,0 +1,22 @@ +#include +#include "ringbuffer.h" + +#define maxvalues 52 + +int main() +{ + ringbuffer buffer; + + initRingbuffer(&buffer, 50); + + for (int i = 0; i < maxvalues; i++) { + addValue(&buffer, i); + } + + for (int i = 0; i < maxvalues; i++) { + printf("Value: %d\n", getValue(&buffer)); + } + + freeRingbuffer(&buffer); + return 0; +} diff --git a/ringbuffer.c b/ringbuffer.c index f6f42f2..fb94bc5 100644 --- a/ringbuffer.c +++ b/ringbuffer.c @@ -1,7 +1,38 @@ #include +#include +#include "ringbuffer.h" -int main() +void initRingbuffer(ringbuffer *buf, int size) { - printf("Hello World!\n"); - return 0; + buf->tail = 0; + buf->head = 0; + buf->max = size; + buf->position = malloc(sizeof(int) * size); +} + +void freeRingbuffer(ringbuffer *buf) +{ + free(buf->position); + buf->position = NULL; +} + +void addValue(ringbuffer *buf, int value) +{ + if (buf->head >= buf->max) + buf->head = 0; + + buf->position[buf->head] = value; + buf->head++; + +} + +int getValue(ringbuffer *buf) +{ + if (buf->tail >= buf->max) + buf->tail = 0; + + int value = buf->position[buf->tail]; + buf->tail++; + + return value; } diff --git a/ringbuffer.h b/ringbuffer.h new file mode 100644 index 0000000..e79292c --- /dev/null +++ b/ringbuffer.h @@ -0,0 +1,16 @@ +#ifndef RINGBUFFER_H +#define RINGBUFFER_H + +typedef struct { + int tail; + int head; + int max; + int *position; +} ringbuffer; + +void initRingbuffer(ringbuffer *buf, int size); +void freeRingbuffer(ringbuffer *buf); +void addValue(ringbuffer *buf, int value); +int getValue(ringbuffer *buf); + +#endif