]> gitweb.hhaalo.de Git - ringbuffer.git/commitdiff
add: value counter
authorBastian Dehn <hhaalo@arcor.de>
Sun, 24 Apr 2022 14:46:56 +0000 (16:46 +0200)
committerBastian Dehn <hhaalo@arcor.de>
Sun, 24 Apr 2022 14:46:56 +0000 (16:46 +0200)
ringbuffer.c
ringbuffer.h

index fb94bc5d77ed91525c228f09570cff08fcdde409..f9e8e1e86b3a774cc2b23fcd41989a93bb541e25 100644 (file)
@@ -4,6 +4,7 @@
 
 void initRingbuffer(ringbuffer *buf, int size)
 {
+       buf->count = 0;
        buf->tail = 0;
        buf->head = 0;
        buf->max = size;
@@ -18,21 +19,28 @@ void freeRingbuffer(ringbuffer *buf)
 
 void addValue(ringbuffer *buf, int value)
 {
+       if (buf->count >= buf->max)
+               buf->count = buf->max;
+
        if (buf->head >= buf->max)
                buf->head = 0;
 
        buf->position[buf->head] = value;
        buf->head++;
-
+       buf->count++;
 }
 
 int getValue(ringbuffer *buf)
 {
+       if (buf->count < 0)
+               return -1;
+
        if (buf->tail >= buf->max)
                buf->tail = 0;
 
        int value = buf->position[buf->tail];
        buf->tail++;
+       buf->count--;
 
        return value;
 }
index e79292c6b04ab8ec4f6c50a6b747f071b3ec1e79..f16e67b3a72cae248d57b52581aa05bfb90a67dc 100644 (file)
@@ -2,6 +2,7 @@
 #define RINGBUFFER_H
 
 typedef struct {
+       int count;
        int tail;
        int head;
        int max;