zombiezen.com/go/lua@v0.0.0-20231013005828-290725fb9140/internal/lua54/lzio.h (about)

     1  /*
     2  ** $Id: lzio.h $
     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 zgetc(z)  (((z)->n--)>0 ?  cast_uchar(*(z)->p++) : luaZ_fill(z))
    21  
    22  
    23  typedef struct Mbuffer {
    24    char *buffer;
    25    size_t n;
    26    size_t buffsize;
    27  } Mbuffer;
    28  
    29  #define luaZ_initbuffer(L, buff) ((buff)->buffer = NULL, (buff)->buffsize = 0)
    30  
    31  #define luaZ_buffer(buff)	((buff)->buffer)
    32  #define luaZ_sizebuffer(buff)	((buff)->buffsize)
    33  #define luaZ_bufflen(buff)	((buff)->n)
    34  
    35  #define luaZ_buffremove(buff,i)	((buff)->n -= (i))
    36  #define luaZ_resetbuffer(buff) ((buff)->n = 0)
    37  
    38  
    39  #define luaZ_resizebuffer(L, buff, size) \
    40  	((buff)->buffer = luaM_reallocvchar(L, (buff)->buffer, \
    41  				(buff)->buffsize, size), \
    42  	(buff)->buffsize = size)
    43  
    44  #define luaZ_freebuffer(L, buff)	luaZ_resizebuffer(L, buff, 0)
    45  
    46  
    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  
    51  
    52  
    53  /* --------- Private Part ------------------ */
    54  
    55  struct Zio {
    56    size_t n;			/* bytes still unread */
    57    const char *p;		/* current position in buffer */
    58    lua_Reader reader;		/* reader function */
    59    void *data;			/* additional data */
    60    lua_State *L;			/* Lua state (for reader) */
    61  };
    62  
    63  
    64  LUAI_FUNC int luaZ_fill (ZIO *z);
    65  
    66  #endif