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