1.1 --- a/ucx/buffer.h Sun Nov 04 20:50:12 2012 +0100 1.2 +++ b/ucx/buffer.h Fri Nov 30 13:10:58 2012 +0100 1.3 @@ -16,14 +16,15 @@ 1.4 1.5 /* the user shall not modify values, but may get the latest pointer */ 1.6 typedef struct { 1.7 - void *space; 1.8 + char *space; 1.9 size_t pos; 1.10 + size_t capacity; 1.11 size_t size; 1.12 int flags; 1.13 } UcxBuffer; 1.14 1.15 /* if space is NULL, new space is allocated and the autofree flag is enforced */ 1.16 -UcxBuffer *ucx_buffer_new(void *space, size_t length, int flags); 1.17 +UcxBuffer *ucx_buffer_new(void *space, size_t size, int flags); 1.18 void ucx_buffer_free(UcxBuffer* buffer); 1.19 1.20 /* 1.21 @@ -31,7 +32,7 @@ 1.22 * if length is zero, the whole remaining buffer shall be extracted 1.23 * the position of the new buffer is set to zero 1.24 */ 1.25 -UcxBuffer *restrict ucx_buffer_extract(UcxBuffer *restrict src, 1.26 +UcxBuffer* ucx_buffer_extract(UcxBuffer *src, 1.27 size_t start, size_t length, int flags); 1.28 #define ucx_buffer_clone(src,flags) \ 1.29 ucx_buffer_extract(src, 0, 0, flags) 1.30 @@ -51,21 +52,46 @@ 1.31 int ucx_buffer_seek(UcxBuffer *buffer, off_t offset, int whence); 1.32 1.33 /* 1.34 - * returns non-zero, iff the current buffer position has exceeded the last 1.35 + * returns non-zero, if the current buffer position has exceeded the last 1.36 * available byte of the underlying buffer 1.37 * 1.38 */ 1.39 int ucx_buffer_eof(UcxBuffer *buffer); 1.40 1.41 -size_t ucx_bufio(void *d, size_t s, size_t n, UcxBuffer* b, _Bool read); 1.42 + 1.43 +int ucx_buffere_extend(UcxBuffer *buffer, size_t len); 1.44 + 1.45 +size_t ucx_buffer_write(const void *ptr, size_t size, size_t nitems, 1.46 + UcxBuffer *buffer); 1.47 + 1.48 +size_t ucx_buffer_read(void *ptr, size_t size, size_t nitems, 1.49 + UcxBuffer *buffer); 1.50 + 1.51 /* when autoextend is enabled, ensure you get the latest pointer to the data */ 1.52 -#define ucx_buffer_write(data, itemsize, nitems, buffer) \ 1.53 - ucx_bufio(data, itemsize, nitems, buffer, 0) 1.54 -#define ucx_buffer_read(data, itemsize, nitems, buffer) \ 1.55 - ucx_bufio(data, itemsize, nitems, buffer, 1) 1.56 +//define ucx_buffer_write(data, itemsize, nitems, buffer) \ 1.57 +// ucx_bufio(data, itemsize, nitems, buffer, 0) 1.58 +//define ucx_buffer_read(data, itemsize, nitems, buffer) \ 1.59 +// ucx_bufio(data, itemsize, nitems, buffer, 1) 1.60 int ucx_buffer_putc(UcxBuffer *b, int c); 1.61 int ucx_buffer_getc(UcxBuffer *b); 1.62 1.63 + 1.64 +/* 1.65 + * copies all bytes from s1 to s2 1.66 + * uses the read function r to read from s1 und writes the data using the 1.67 + * write function w to s2 1.68 + * returns the number of bytes copied 1.69 + */ 1.70 +size_t ucx_buffer_generic_copy(void *s1, void *s2, read_func r, write_func w, 1.71 + size_t bufsize); 1.72 + 1.73 + 1.74 +#define UCX_DEFAULT_BUFFER_SIZE 0x4000000 1.75 + 1.76 +#define ucx_buffer_copy(s1,s2,r,w) \ 1.77 + ucx_buffer_generic_copy(s1, s2, (read_func)r, (write_func)w, \ 1.78 + UCX_DEFAULT_BUFFER_SIZE) 1.79 + 1.80 #ifdef __cplusplus 1.81 } 1.82 #endif