diff options
Diffstat (limited to 'cbuffer.h')
-rw-r--r-- | cbuffer.h | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/cbuffer.h b/cbuffer.h new file mode 100644 index 0000000..d25d765 --- /dev/null +++ b/cbuffer.h @@ -0,0 +1,61 @@ +/* Copyright (C) 2007-2008 The Android Open Source Project +** +** This software is licensed under the terms of the GNU General Public +** License version 2, as published by the Free Software Foundation, and +** may be copied, distributed, and modified under those terms. +** +** This program is distributed in the hope that it will be useful, +** but WITHOUT ANY WARRANTY; without even the implied warranty of +** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +** GNU General Public License for more details. +*/ +#ifndef _qemu_cbuffer_h +#define _qemu_cbuffer_h + +#include <stdint.h> + +/* Basic circular buffer type and methods */ + +typedef struct { + uint8_t* buff; + int size; + int rpos; + int count; +} CBuffer; + +static __inline__ void +cbuffer_reset( CBuffer* cb, void* buff, int size ) +{ + cb->buff = buff; + cb->size = size; + cb->rpos = 0; + cb->count = 0; +} + +static __inline__ int +cbuffer_write_avail( CBuffer* cb ) +{ + return cb->size - cb->count; +} + +extern int cbuffer_write( CBuffer* cb, const void* from, int len ); +extern int cbuffer_write_peek( CBuffer* cb, uint8_t* *pbase ); +extern void cbuffer_write_step( CBuffer* cb, int len ); + +static __inline__ int +cbuffer_read_avail( CBuffer* cb ) +{ + return cb->count; +} + +extern int cbuffer_read( CBuffer* cb, void* to, int len ); +extern int cbuffer_read_peek( CBuffer* cb, uint8_t* *pbase ); +extern void cbuffer_read_step( CBuffer* cb, int len ); + +extern const char* cbuffer_quote( CBuffer* cb ); +extern const char* cbuffer_quote_data( CBuffer* cb ); +extern void cbuffer_print( CBuffer* cb ); + +#endif /* qemu_cbuffer_h */ + + |