/*
 * Functions to privide unlimited character buffers
 */
#ifndef _H_BUFFER_
#define _H_BUFFER_

/*
 * MAX_OUTBUF_LEN must be a power of 2 and it should
 * be large enough that overflows are uncommon, but
 * we use many automatic instances of the queues so
 * it shouldn't be so large that our stack grows
 * like Jack's beanstock.
 */
#ifndef MAX_OUTBUF_LEN
#define MAX_OUTBUF_LEN			1024
#endif

typedef struct buffer_t {
	unsigned short head, tail;
	struct buffer_t *next, *last;
	char buf[MAX_OUTBUF_LEN];
} buffer_t;

#define buf_empty(b)	(((b) && (b)->head != (b)->tail) ? 0 : is_buffer_empty(b))

extern int is_buffer_empty _ANSI_PROTO_((buffer_t*));
extern int buf_count _ANSI_PROTO_((buffer_t*));
extern void buf_add _ANSI_PROTO_((buffer_t*, int));
extern void buf_add_str _ANSI_PROTO_((buffer_t*, char*));
extern char buf_get _ANSI_PROTO_((buffer_t*));
extern void buf_init _ANSI_PROTO_((buffer_t*));
extern void buf_destroy _ANSI_PROTO_((buffer_t*));
extern void buf_concat _ANSI_PROTO_((buffer_t*,buffer_t*));
extern void buf_move_to _ANSI_PROTO_((buffer_t*,char*));
extern char *buf_get_str _ANSI_PROTO_((buffer_t*));

#endif /* _H_BUFFER_ */


syntax highlighted by Code2HTML, v. 0.9.1