ucx/buffer.h

changeset 76
655020a30e77
parent 69
fb59270b1de3
child 81
86a23238d8a1
     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

mercurial