int main() { ringbuf *r; size_t sz; int rc; char *d; r = ringbuf_new(11); printf("putting 7 bytes into buffer of sz 11\n"); rc = ringbuf_put(r, z, 7); printf("put: %s\n", (rc == -1) ? "failed" : "ok"); printf("consuming 7\n"); ringbuf_mark_consumed(r, 7); printf("next put of > 4 bytes wraps buffer, writing 5\n"); rc = ringbuf_put(r, z, 5); printf("put: %s\n", (rc == -1) ? "failed" : "ok"); sz = ringbuf_get_next_chunk(r, &d); printf("chunk sz %lu: sz, %.*s\n", sz, (int)sz, d); printf("reading 3, of 5 available\n"); ringbuf_mark_consumed(r, 3); printf("next read is last byte before wrapping\n"); sz = ringbuf_get_next_chunk(r, &d); printf("chunk sz %lu: sz, %.*s\n", sz, (int)sz, d); ringbuf_mark_consumed(r, 1); printf("next read starts reading from wrapped part\n"); sz = ringbuf_get_next_chunk(r, &d); printf("chunk sz %lu: sz, %.*s\n", sz, (int)sz, d); ringbuf_mark_consumed(r, 1); printf("nothing left\n"); sz = ringbuf_get_pending_size(r); printf("size = %lu\n", sz); ringbuf_free(r); return 0; }
int main() { ringbuf *r; size_t sz; int rc; char *d; char buf[32+11]; /* room for struct ring + 11 bytes of ring */ r = ringbuf_take(buf,sizeof(buf)); printf("gave buffer (ringbuf_take) expecting 11 free bytes\n"); sz = ringbuf_get_freespace(r); printf("buffer has %lu free bytes\n", sz); printf("putting 7 bytes into buffer of sz 11\n"); rc = ringbuf_put(r, z, 7); printf("put: %s\n", (rc == -1) ? "failed" : "ok"); sz = ringbuf_get_freespace(r); printf("buffer has %lu free bytes\n", sz); printf("consuming 3\n"); ringbuf_mark_consumed(r, 3); sz = ringbuf_get_freespace(r); printf("buffer has %lu free bytes\n", sz); sz = ringbuf_get_next_chunk(r, &d); printf("chunk sz %lu: sz, %.*s\n", sz, (int)sz, d); printf("marking clear\n"); ringbuf_clear(r); sz = ringbuf_get_freespace(r); printf("buffer has %lu free bytes\n", sz); printf("nothing left\n"); sz = ringbuf_get_pending_size(r); printf("pending size = %lu\n", sz); sz = ringbuf_get_freespace(r); printf("buffer has %lu free bytes\n", sz); /* do not ringbuf_free(r); since we used ringbuf_take */ return 0; }