91 lines
1.9 KiB
C
91 lines
1.9 KiB
C
/*
|
|
* savebuffer.h
|
|
* Luabins save buffer
|
|
* See copyright notice in luabins.h
|
|
*/
|
|
|
|
#ifndef LUABINS_SAVEBUFFER_H_INCLUDED_
|
|
#define LUABINS_SAVEBUFFER_H_INCLUDED_
|
|
|
|
typedef struct luabins_SaveBuffer
|
|
{
|
|
lua_Alloc alloc_fn;
|
|
void * alloc_ud;
|
|
|
|
unsigned char * buffer;
|
|
size_t buf_size;
|
|
size_t end;
|
|
|
|
} luabins_SaveBuffer;
|
|
|
|
void lbsSB_init(
|
|
luabins_SaveBuffer * sb,
|
|
lua_Alloc alloc_fn,
|
|
void * alloc_ud
|
|
);
|
|
|
|
/*
|
|
* Ensures that there is at least delta size available in buffer.
|
|
* New size is aligned by blockSize increments.
|
|
* Returns non-zero if resize failed.
|
|
* If you pre-sized the buffer, subsequent writes up to the new size
|
|
* are guaranteed to not fail.
|
|
*/
|
|
int lbsSB_grow(luabins_SaveBuffer * sb, size_t delta);
|
|
|
|
/*
|
|
* Returns non-zero if write failed.
|
|
* Allocates buffer as needed.
|
|
*/
|
|
int lbsSB_write(
|
|
luabins_SaveBuffer * sb,
|
|
const unsigned char * bytes,
|
|
size_t length
|
|
);
|
|
|
|
/*
|
|
* Returns non-zero if write failed.
|
|
* Allocates buffer as needed.
|
|
* Convenience function.
|
|
*/
|
|
int lbsSB_writechar(
|
|
luabins_SaveBuffer * sb,
|
|
unsigned char byte
|
|
);
|
|
|
|
#define lbsSB_length(sb) ( (sb)->end )
|
|
|
|
/*
|
|
* If offset is greater than total length, data is appended to the end.
|
|
* Returns non-zero if write failed.
|
|
* Allocates buffer as needed.
|
|
*/
|
|
int lbsSB_overwrite(
|
|
luabins_SaveBuffer * sb,
|
|
size_t offset,
|
|
const unsigned char * bytes,
|
|
size_t length
|
|
);
|
|
|
|
/*
|
|
* If offset is greater than total length, data is appended to the end.
|
|
* Returns non-zero if write failed.
|
|
* Allocates buffer as needed.
|
|
* Convenience function.
|
|
*/
|
|
int lbsSB_overwritechar(
|
|
luabins_SaveBuffer * sb,
|
|
size_t offset,
|
|
unsigned char byte
|
|
);
|
|
|
|
/*
|
|
* Returns a pointer to the internal buffer with data.
|
|
* Note that buffer is NOT zero-terminated.
|
|
* Buffer is valid until next operation with the given sb.
|
|
*/
|
|
const unsigned char * lbsSB_buffer(luabins_SaveBuffer * sb, size_t * length);
|
|
|
|
void lbsSB_destroy(luabins_SaveBuffer * sb);
|
|
|
|
#endif /* LUABINS_SAVEBUFFER_H_INCLUDED_ */
|