Aegisub/vendor/luabins/src/savebuffer.h
2014-04-24 23:00:41 +02:00

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