project(ringbuffer)
-add_executable(ringbuffer ringbuffer.c)
+add_executable(ringbuffer demo.c ringbuffer.c)
--- /dev/null
+#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;
+}
#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;
}
--- /dev/null
+#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