paulo@0: /* paulo@0: * $Id: io_buf.h,v 1.2 2003/09/17 17:44:11 hipnod Exp $ paulo@0: * paulo@0: * Copyright (C) 2003 giFT project (gift.sourceforge.net) paulo@0: * paulo@0: * This program is free software; you can redistribute it and/or modify it paulo@0: * under the terms of the GNU General Public License as published by the paulo@0: * Free Software Foundation; either version 2, or (at your option) any paulo@0: * later version. paulo@0: * paulo@0: * This program is distributed in the hope that it will be useful, but paulo@0: * WITHOUT ANY WARRANTY; without even the implied warranty of paulo@0: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU paulo@0: * General Public License for more details. paulo@0: */ paulo@0: paulo@0: #ifndef GIFT_GT_IO_BUF_H_ paulo@0: #define GIFT_GT_IO_BUF_H_ paulo@0: paulo@0: /*****************************************************************************/ paulo@0: paulo@0: /* paulo@0: * This duplicates libgift's String somewhat... paulo@0: */ paulo@0: struct io_buf paulo@0: { paulo@0: uint8_t *data; paulo@0: size_t size; paulo@0: size_t r_offs; paulo@0: size_t w_offs; paulo@0: }; paulo@0: paulo@0: /*****************************************************************************/ paulo@0: paulo@0: /* paulo@0: * Macros for accessing particular things about an I/O buf... paulo@0: */ paulo@0: paulo@0: #define io_buf_read_avail(io_buf) \ paulo@0: ((io_buf)->w_offs - (io_buf)->r_offs) paulo@0: paulo@0: #define io_buf_len(io_buf) \ paulo@0: ((io_buf)->w_offs) paulo@0: paulo@0: #define io_buf_size(io_buf) \ paulo@0: ((io_buf)->size) paulo@0: paulo@0: #define io_buf_write_avail(io_buf) \ paulo@0: ((io_buf)->size - (io_buf)->w_offs) paulo@0: paulo@0: #define io_buf_write_ptr(io_buf) \ paulo@0: (&(io_buf)->data[(io_buf)->w_offs]) paulo@0: paulo@0: #define io_buf_read_ptr(iobuf) \ paulo@0: (&(iobuf)->data[(iobuf)->r_offs]) paulo@0: paulo@0: /*****************************************************************************/ paulo@0: paulo@0: struct io_buf *io_buf_new (size_t len); paulo@0: void io_buf_free (struct io_buf *buf); paulo@0: uint8_t *io_buf_free_keep (struct io_buf *buf); paulo@0: paulo@0: BOOL io_buf_resize (struct io_buf *buf, size_t len); paulo@0: void io_buf_reset (struct io_buf *buf); paulo@0: paulo@0: void io_buf_push (struct io_buf *buf, size_t len); paulo@0: void io_buf_pop (struct io_buf *buf, size_t len); paulo@0: paulo@0: size_t io_buf_copy (struct io_buf *dst, struct io_buf *src, paulo@0: size_t len); paulo@0: paulo@0: /*****************************************************************************/ paulo@0: paulo@0: #endif /* GIFT_GT_IO_BUF_H_ */