lbuffer.c 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. /*
  2. ** $Id: lbuffer.c,v 1.7 1999/02/25 19:13:56 roberto Exp roberto $
  3. ** Auxiliary functions for building Lua libraries
  4. ** See Copyright Notice in lua.h
  5. */
  6. #include <stdio.h>
  7. #include "lauxlib.h"
  8. #include "lmem.h"
  9. #include "lstate.h"
  10. /*-------------------------------------------------------
  11. ** Auxiliary buffer
  12. -------------------------------------------------------*/
  13. #define EXTRABUFF 32
  14. #define openspace(size) if (L->Mbuffnext+(size) > L->Mbuffsize) Openspace(size)
  15. static void Openspace (int size) {
  16. lua_State *l = L; /* to optimize */
  17. size += EXTRABUFF;
  18. l->Mbuffsize = l->Mbuffnext+size;
  19. l->Mbuffer = luaM_growvector(l->Mbuffer, l->Mbuffnext, size, char,
  20. memEM, MAX_INT);
  21. }
  22. char *luaL_openspace (int size) {
  23. openspace(size);
  24. return L->Mbuffer+L->Mbuffnext;
  25. }
  26. void luaL_addchar (int c) {
  27. openspace(1);
  28. L->Mbuffer[L->Mbuffnext++] = (char)c;
  29. }
  30. void luaL_resetbuffer (void) {
  31. L->Mbuffnext = L->Mbuffbase;
  32. }
  33. void luaL_addsize (int n) {
  34. L->Mbuffnext += n;
  35. }
  36. int luaL_getsize (void) {
  37. return L->Mbuffnext-L->Mbuffbase;
  38. }
  39. int luaL_newbuffer (int size) {
  40. int old = L->Mbuffbase;
  41. openspace(size);
  42. L->Mbuffbase = L->Mbuffnext;
  43. return old;
  44. }
  45. void luaL_oldbuffer (int old) {
  46. L->Mbuffnext = L->Mbuffbase;
  47. L->Mbuffbase = old;
  48. }
  49. char *luaL_buffer (void) {
  50. return L->Mbuffer+L->Mbuffbase;
  51. }