1*dfc11533SChris Williamson /* 2*dfc11533SChris Williamson ** $Id: lzio.h,v 1.26.1.1 2013/04/12 18:48:47 roberto Exp $ 3*dfc11533SChris Williamson ** Buffered streams 4*dfc11533SChris Williamson ** See Copyright Notice in lua.h 5*dfc11533SChris Williamson */ 6*dfc11533SChris Williamson 7*dfc11533SChris Williamson 8*dfc11533SChris Williamson #ifndef lzio_h 9*dfc11533SChris Williamson #define lzio_h 10*dfc11533SChris Williamson 11*dfc11533SChris Williamson #include "lua.h" 12*dfc11533SChris Williamson 13*dfc11533SChris Williamson #include "lmem.h" 14*dfc11533SChris Williamson 15*dfc11533SChris Williamson 16*dfc11533SChris Williamson #define EOZ (-1) /* end of stream */ 17*dfc11533SChris Williamson 18*dfc11533SChris Williamson typedef struct Zio ZIO; 19*dfc11533SChris Williamson 20*dfc11533SChris Williamson #define zgetc(z) (((z)->n--)>0 ? cast_uchar(*(z)->p++) : luaZ_fill(z)) 21*dfc11533SChris Williamson 22*dfc11533SChris Williamson 23*dfc11533SChris Williamson typedef struct Mbuffer { 24*dfc11533SChris Williamson char *buffer; 25*dfc11533SChris Williamson size_t n; 26*dfc11533SChris Williamson size_t buffsize; 27*dfc11533SChris Williamson } Mbuffer; 28*dfc11533SChris Williamson 29*dfc11533SChris Williamson #define luaZ_initbuffer(L, buff) ((buff)->buffer = NULL, (buff)->buffsize = 0) 30*dfc11533SChris Williamson 31*dfc11533SChris Williamson #define luaZ_buffer(buff) ((buff)->buffer) 32*dfc11533SChris Williamson #define luaZ_sizebuffer(buff) ((buff)->buffsize) 33*dfc11533SChris Williamson #define luaZ_bufflen(buff) ((buff)->n) 34*dfc11533SChris Williamson 35*dfc11533SChris Williamson #define luaZ_resetbuffer(buff) ((buff)->n = 0) 36*dfc11533SChris Williamson 37*dfc11533SChris Williamson 38*dfc11533SChris Williamson #define luaZ_resizebuffer(L, buff, size) \ 39*dfc11533SChris Williamson (luaM_reallocvector(L, (buff)->buffer, (buff)->buffsize, size, char), \ 40*dfc11533SChris Williamson (buff)->buffsize = size) 41*dfc11533SChris Williamson 42*dfc11533SChris Williamson #define luaZ_freebuffer(L, buff) luaZ_resizebuffer(L, buff, 0) 43*dfc11533SChris Williamson 44*dfc11533SChris Williamson 45*dfc11533SChris Williamson LUAI_FUNC char *luaZ_openspace (lua_State *L, Mbuffer *buff, size_t n); 46*dfc11533SChris Williamson LUAI_FUNC void luaZ_init (lua_State *L, ZIO *z, lua_Reader reader, 47*dfc11533SChris Williamson void *data); 48*dfc11533SChris Williamson LUAI_FUNC size_t luaZ_read (ZIO* z, void* b, size_t n); /* read next n bytes */ 49*dfc11533SChris Williamson 50*dfc11533SChris Williamson 51*dfc11533SChris Williamson 52*dfc11533SChris Williamson /* --------- Private Part ------------------ */ 53*dfc11533SChris Williamson 54*dfc11533SChris Williamson struct Zio { 55*dfc11533SChris Williamson size_t n; /* bytes still unread */ 56*dfc11533SChris Williamson const char *p; /* current position in buffer */ 57*dfc11533SChris Williamson lua_Reader reader; /* reader function */ 58*dfc11533SChris Williamson void* data; /* additional data */ 59*dfc11533SChris Williamson lua_State *L; /* Lua state (for reader) */ 60*dfc11533SChris Williamson }; 61*dfc11533SChris Williamson 62*dfc11533SChris Williamson 63*dfc11533SChris Williamson LUAI_FUNC int luaZ_fill (ZIO *z); 64*dfc11533SChris Williamson 65*dfc11533SChris Williamson #endif 66