| /* 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 */ |
| |
| |