/*
* buffer.h:
* Circular buffers.
*
* Copyright (c) 2002 Chris Lightfoot. All rights reserved.
* Email: chris@ex-parrot.com; WWW: http://www.ex-parrot.com/~chris/
*
* $Id: buffer.h,v 1.3 2003/11/06 01:19:27 chris Exp $
*
*/
#ifndef __BUFFER_H_ /* include guard */
#define __BUFFER_H_
typedef struct _buffer {
size_t len;
char *buf;
off_t put, get;
} *buffer;
/* buffer_available BUFFER
* Return the number of bytes of data available to consume from BUFFER. This
* is a macro which may evaluate BUFFER more than once. */
#define buffer_available(B) ((size_t)(((B)->put + (B)->len - (B)->get) % (B)->len))
/* buffer.c */
buffer buffer_new(const size_t len);
void buffer_delete(buffer B);
void buffer_make_contiguous(buffer B);
char *buffer_get_consume_ptr(buffer B, size_t *slen);
void buffer_consume_bytes(buffer B, const size_t num);
char *buffer_consume_all(buffer B, char *str, size_t *slen);
char *buffer_consume_to_mark(buffer B, const char *mark, const size_t mlen, char *str, size_t *slen);
void buffer_expand(buffer B, const size_t num);
void buffer_push_data(buffer B, const char *data, const size_t dlen);
char *buffer_get_push_ptr(buffer B, size_t *len);
void buffer_push_bytes(buffer B, const size_t num);
#endif /* __BUFFER_H_ */
syntax highlighted by Code2HTML, v. 0.9.1