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