summaryrefslogtreecommitdiffstats
path: root/libnetdata/circular_buffer
diff options
context:
space:
mode:
Diffstat (limited to 'libnetdata/circular_buffer')
-rw-r--r--libnetdata/circular_buffer/Makefile.am8
-rw-r--r--libnetdata/circular_buffer/README.md14
-rw-r--r--libnetdata/circular_buffer/circular_buffer.c113
-rw-r--r--libnetdata/circular_buffer/circular_buffer.h20
4 files changed, 0 insertions, 155 deletions
diff --git a/libnetdata/circular_buffer/Makefile.am b/libnetdata/circular_buffer/Makefile.am
deleted file mode 100644
index 161784b8..00000000
--- a/libnetdata/circular_buffer/Makefile.am
+++ /dev/null
@@ -1,8 +0,0 @@
-# SPDX-License-Identifier: GPL-3.0-or-later
-
-AUTOMAKE_OPTIONS = subdir-objects
-MAINTAINERCLEANFILES = $(srcdir)/Makefile.in
-
-dist_noinst_DATA = \
- README.md \
- $(NULL)
diff --git a/libnetdata/circular_buffer/README.md b/libnetdata/circular_buffer/README.md
deleted file mode 100644
index c4738651..00000000
--- a/libnetdata/circular_buffer/README.md
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-title: "Circular Buffer"
-custom_edit_url: https://github.com/netdata/netdata/edit/master/libnetdata/circular_buffer/README.md
-sidebar_label: "Circular Buffer"
-learn_status: "Published"
-learn_topic_type: "Tasks"
-learn_rel_path: "Developers/libnetdata"
--->
-
-# Circular Buffer
-
-`struct circular_buffer` is an adaptive circular buffer. It will start at an initial size
-and grow up to a maximum size as it fills. Two indices within the structure track the current
-`read` and `write` position for data.
diff --git a/libnetdata/circular_buffer/circular_buffer.c b/libnetdata/circular_buffer/circular_buffer.c
deleted file mode 100644
index 7ffe6b8b..00000000
--- a/libnetdata/circular_buffer/circular_buffer.c
+++ /dev/null
@@ -1,113 +0,0 @@
-#include "../libnetdata.h"
-
-struct circular_buffer *cbuffer_new(size_t initial, size_t max, size_t *statistics) {
- struct circular_buffer *buf = mallocz(sizeof(struct circular_buffer));
- buf->size = initial;
- buf->data = mallocz(initial);
- buf->write = 0;
- buf->read = 0;
- buf->max_size = max;
- buf->statistics = statistics;
-
- if(buf->statistics)
- __atomic_add_fetch(buf->statistics, sizeof(struct circular_buffer) + buf->size, __ATOMIC_RELAXED);
-
- return buf;
-}
-
-void cbuffer_free(struct circular_buffer *buf) {
- if (unlikely(!buf))
- return;
-
- if(buf->statistics)
- __atomic_sub_fetch(buf->statistics, sizeof(struct circular_buffer) + buf->size, __ATOMIC_RELAXED);
-
- freez(buf->data);
- freez(buf);
-}
-
-static int cbuffer_realloc_unsafe(struct circular_buffer *buf) {
- // Check that we can grow
- if (buf->size >= buf->max_size)
- return 1;
-
- size_t old_size = buf->size;
- size_t new_size = buf->size * 2;
- if (new_size > buf->max_size)
- new_size = buf->max_size;
-
- // We know that: size < new_size <= max_size
- // For simplicity align the current data at the bottom of the new buffer
- char *new_data = mallocz(new_size);
- if (buf->read == buf->write)
- buf->write = 0; // buffer is empty
- else if (buf->read < buf->write) {
- memcpy(new_data, buf->data + buf->read, buf->write - buf->read);
- buf->write -= buf->read;
- } else {
- size_t top_part = buf->size - buf->read;
- memcpy(new_data, buf->data + buf->read, top_part);
- memcpy(new_data + top_part, buf->data, buf->write);
- buf->write = top_part + buf->write;
- }
- buf->read = 0;
-
- // Switch buffers
- freez(buf->data);
- buf->data = new_data;
- buf->size = new_size;
-
- if(buf->statistics)
- __atomic_add_fetch(buf->statistics, new_size - old_size, __ATOMIC_RELAXED);
-
- return 0;
-}
-
-size_t cbuffer_available_size_unsafe(struct circular_buffer *buf) {
- size_t len = (buf->write >= buf->read) ? (buf->write - buf->read) : (buf->size - buf->read + buf->write);
- return buf->max_size - len;
-}
-
-int cbuffer_add_unsafe(struct circular_buffer *buf, const char *d, size_t d_len) {
- size_t len = (buf->write >= buf->read) ? (buf->write - buf->read) : (buf->size - buf->read + buf->write);
- while (d_len + len >= buf->size) {
- if (cbuffer_realloc_unsafe(buf)) {
- return 1;
- }
- }
- // Guarantee: write + d_len cannot hit read
- if (buf->write + d_len < buf->size) {
- memcpy(buf->data + buf->write, d, d_len);
- buf->write += d_len;
- }
- else {
- size_t top_part = buf->size - buf->write;
- memcpy(buf->data + buf->write, d, top_part);
- memcpy(buf->data, d + top_part, d_len - top_part);
- buf->write = d_len - top_part;
- }
- return 0;
-}
-
-// Assume caller does not remove too many bytes (i.e. read will jump over write)
-void cbuffer_remove_unsafe(struct circular_buffer *buf, size_t num) {
- buf->read += num;
- // Assume num < size (i.e. caller cannot remove more bytes than are in the buffer)
- if (buf->read >= buf->size)
- buf->read -= buf->size;
-}
-
-size_t cbuffer_next_unsafe(struct circular_buffer *buf, char **start) {
- if (start != NULL)
- *start = buf->data + buf->read;
-
- if (buf->read <= buf->write) {
- return buf->write - buf->read; // Includes empty case
- }
- return buf->size - buf->read;
-}
-
-void cbuffer_flush(struct circular_buffer*buf) {
- buf->write = 0;
- buf->read = 0;
-} \ No newline at end of file
diff --git a/libnetdata/circular_buffer/circular_buffer.h b/libnetdata/circular_buffer/circular_buffer.h
deleted file mode 100644
index 9d29a84d..00000000
--- a/libnetdata/circular_buffer/circular_buffer.h
+++ /dev/null
@@ -1,20 +0,0 @@
-#ifndef CIRCULAR_BUFFER_H
-#define CIRCULAR_BUFFER_H 1
-
-#include <string.h>
-
-struct circular_buffer {
- size_t size, write, read, max_size;
- size_t *statistics;
- char *data;
-};
-
-struct circular_buffer *cbuffer_new(size_t initial, size_t max, size_t *statistics);
-void cbuffer_free(struct circular_buffer *buf);
-int cbuffer_add_unsafe(struct circular_buffer *buf, const char *d, size_t d_len);
-void cbuffer_remove_unsafe(struct circular_buffer *buf, size_t num);
-size_t cbuffer_next_unsafe(struct circular_buffer *buf, char **start);
-size_t cbuffer_available_size_unsafe(struct circular_buffer *buf);
-void cbuffer_flush(struct circular_buffer*buf);
-
-#endif