arduino_midi_player/Midi/music-box-nv32-master/Ring-Buffer/examples/simple.c
2025-03-24 14:30:56 +08:00

87 lines
2.1 KiB
C

#include <assert.h>
#include <stdio.h>
#include "../ringbuffer.h"
int main(void) {
int i, cnt;
char buf;
char buf_arr[50];
/* Create and initialize ring buffer */
ring_buffer_t ring_buffer;
ring_buffer_init(&ring_buffer);
/* Add elements to buffer; one at a time */
for(i = 0; i < 100; i++) {
ring_buffer_queue(&ring_buffer, i);
}
/* Verify size */
assert(ring_buffer_num_items(&ring_buffer) == 100);
/* Peek third element */
cnt = ring_buffer_peek(&ring_buffer, &buf, 3);
/* Assert byte returned */
assert(cnt == 1);
/* Assert contents */
assert(buf == 3);
/* Dequeue all elements */
for(cnt = 0; ring_buffer_dequeue(&ring_buffer, &buf) > 0; cnt++) {
/* Do something with buf... */
assert(buf == cnt);
printf("Read: %d\n", buf);
}
printf("\n===============\n");
/* Add array */
ring_buffer_queue_arr(&ring_buffer, "Hello, Ring Buffer!", 20);
/* Is buffer empty? */
assert(!ring_buffer_is_empty(&ring_buffer));
/* Dequeue all elements */
while(ring_buffer_dequeue(&ring_buffer, &buf) > 0) {
/* Print contents */
printf("Read: %c\n", buf);
}
/* Add new array */
ring_buffer_queue_arr(&ring_buffer, "Hello again, Ring Buffer!", 26);
/* Dequeue array in two parts */
printf("Read:\n");
cnt = ring_buffer_dequeue_arr(&ring_buffer, buf_arr, 13);
printf("%d\n", cnt);
assert(cnt == 13);
/* Add \0 termination before printing */
buf_arr[13] = '\0';
printf("%s\n", buf_arr);
/* Dequeue remaining */
cnt = ring_buffer_dequeue_arr(&ring_buffer, buf_arr, 13);
assert(cnt == 13);
printf("%s", buf_arr);
printf("\n===============\n");
/* Overfill buffer */
for(i = 0; i < 1000; i++) {
ring_buffer_queue(&ring_buffer, (i % 127));
}
/* Is buffer full? */
if(ring_buffer_is_full(&ring_buffer)) {
cnt = ring_buffer_num_items(&ring_buffer);
printf("Buffer is full and contains %d bytes\n", cnt);
}
/* Dequeue all elements */
while(ring_buffer_dequeue(&ring_buffer, &buf) > 0) {
/* Print contents */
printf("Read: 0x%02x\n", buf);
}
return 0;
}