1/* 2 * Copyright 2005, Axel D��rfler, axeld@pinc-software.de. All rights reserved. 3 * Distributed under the terms of the MIT License. 4 */ 5#ifndef RING_BUFFER_H 6#define RING_BUFFER_H 7 8 9#include <OS.h> 10 11 12struct iovec; 13 14 15struct ring_buffer { 16 int32 first; 17 int32 in; 18 int32 size; 19 uint8 buffer[0]; 20}; 21 22 23// flags for create_ring_buffer_etc() 24#define RING_BUFFER_INIT_FROM_BUFFER 0x01 25 26 27#ifdef __cplusplus 28extern "C" { 29#endif 30 31struct ring_buffer *create_ring_buffer(size_t size); 32struct ring_buffer *create_ring_buffer_etc(void *memory, size_t size, 33 uint32 flags); 34void delete_ring_buffer(struct ring_buffer *buffer); 35 36void ring_buffer_clear(struct ring_buffer *buffer); 37size_t ring_buffer_readable(struct ring_buffer *buffer); 38size_t ring_buffer_writable(struct ring_buffer *buffer); 39void ring_buffer_flush(struct ring_buffer *buffer, size_t bytes); 40size_t ring_buffer_read(struct ring_buffer *buffer, uint8 *data, ssize_t length); 41size_t ring_buffer_write(struct ring_buffer *buffer, const uint8 *data, ssize_t length); 42ssize_t ring_buffer_user_read(struct ring_buffer *buffer, uint8 *data, ssize_t length); 43ssize_t ring_buffer_user_write(struct ring_buffer *buffer, const uint8 *data, ssize_t length); 44size_t ring_buffer_peek(struct ring_buffer *buffer, size_t offset, void *data, 45 size_t length); 46int32 ring_buffer_get_vecs(struct ring_buffer *buffer, struct iovec *vecs); 47size_t ring_buffer_move(struct ring_buffer *to, ssize_t length, struct ring_buffer *from); 48 49#ifdef __cplusplus 50} 51#endif 52 53 54#endif /* RING_BUFFER_H */ 55