-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcircular_buffer.c
30 lines (25 loc) · 1015 Bytes
/
circular_buffer.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <circular_buffer.h>
void write_buffer (struct circular_buffer* buffer,char mander){
if(buffer_full(buffer))return;
buffer->array[buffer->write_point] = mander;
if(++buffer->write_point >= KEYBOARD_BUFFER_SIZE)buffer->write_point =0;
if(buffer->write_point == buffer->read_point)buffer->fullgym = 1;
return;
}
char read_buffer(struct circular_buffer* buffer){
char mander = buffer->array[buffer->read_point];
if(++buffer->read_point >= KEYBOARD_BUFFER_SIZE)buffer->read_point =0;
if(buffer->write_point == buffer->read_point)buffer->fullgym = 0;
return mander;
}
int buffer_full(struct circular_buffer* buffer){
return buffer->fullgym;//TT
}
int buffer_length(struct circular_buffer* buffer){
if(buffer->write_point > buffer->read_point) return buffer->write_point - buffer->read_point ;
else if(buffer->write_point == buffer->read_point){
if(buffer->fullgym)return KEYBOARD_BUFFER_SIZE;
return 0;
}
return KEYBOARD_BUFFER_SIZE - buffer->read_point + buffer->write_point;
}