Compare commits

...

1 Commits

Author SHA1 Message Date
2f050f78c5 Загрузил(а) файлы в '' 2023-06-23 05:43:36 +00:00
2 changed files with 82 additions and 0 deletions

64
device_ring_buffer.c Normal file
View File

@ -0,0 +1,64 @@
#include "device_ring_buffer.h"
void rb_initialize(struct rb* _rb)
{
memset(_rb, 0, sizeof(struct rb));
}
int rb_put(struct rb* _rb, char element)
{
if (_rb->count < sizeof(_rb->buf))
{
_rb->count++;
if (_rb->tail != _rb->head)
{
_rb->buf[_rb->tail] = element;
_rb->tail++;
if (_rb->tail == sizeof(_rb->buf))
{
_rb->tail = 0;
}
return 1;
}
else
{
return 0;
}
}
else
{
return -1;
}
}
int rb_get(struct rb* _rb, char *element)
{
if (_rb->count > 0)
{
_rb->count--;
if (_rb->tail != _rb->head)
{
*element = _rb->buf[_rb->head];
_rb->head++;
if (_rb->head == sizeof(_rb->buf))
{
_rb->head = 0;
}
return 1;
}
else
{
return 0;
}
}
else
{
return -1;
}
}
int count_elements(struct rb* _rb)
{
return _rb->count;
}

18
device_ring_buffer.h Normal file
View File

@ -0,0 +1,18 @@
#ifndef DEVICE_RING_BUFFER_H
#define DEVICE_RING_BUFFER_H
#include <stdio.h>
#include <string.h>
struct rb {
char buf[32];
int head;
int tail;
int count;
};
void rb_initialize(struct rb* _rb);
int rb_put(struct rb* _rb, char element);
int rb_get(struct rb* _rb, char* element);
int count_elements(struct rb* _rb);
#endif /*DEVICE_RING_BUFFER_H*/