]> gitweb.hhaalo.de Git - ringbuffer.git/commitdiff
incomplete ringbuffer
authorBastian Dehn <hhaalo@arcor.de>
Sun, 24 Apr 2022 14:33:20 +0000 (16:33 +0200)
committerBastian Dehn <hhaalo@arcor.de>
Sun, 24 Apr 2022 14:33:20 +0000 (16:33 +0200)
CMakeLists.txt
demo.c [new file with mode: 0644]
ringbuffer.c
ringbuffer.h [new file with mode: 0644]

index 2eeaaa0420b4eed3170b80d3d5fb447904a6fa87..2accbcd99e5d4dcf242201be833d9fd06f3e774c 100644 (file)
@@ -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 (file)
index 0000000..5078cfd
--- /dev/null
+++ b/demo.c
@@ -0,0 +1,22 @@
+#include <stdio.h>
+#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;       
+}
index f6f42f2a2b9c38587ef9803944ea4095f627ef53..fb94bc5d77ed91525c228f09570cff08fcdde409 100644 (file)
@@ -1,7 +1,38 @@
 #include <stdio.h>
+#include <stdlib.h>
+#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 (file)
index 0000000..e79292c
--- /dev/null
@@ -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