mirror of
https://github.com/LuaJIT/LuaJIT.git
synced 2025-02-07 23:24:09 +00:00
67 lines
1.2 KiB
C
67 lines
1.2 KiB
C
![]() |
/*
|
||
|
** Buffer library.
|
||
|
** Copyright (C) 2005-2021 Mike Pall. See Copyright Notice in luajit.h
|
||
|
*/
|
||
|
|
||
|
#define lib_buffer_c
|
||
|
#define LUA_LIB
|
||
|
|
||
|
#include "lua.h"
|
||
|
#include "lauxlib.h"
|
||
|
#include "lualib.h"
|
||
|
|
||
|
#include "lj_obj.h"
|
||
|
|
||
|
#if LJ_HASBUFFER
|
||
|
#include "lj_gc.h"
|
||
|
#include "lj_buf.h"
|
||
|
#include "lj_serialize.h"
|
||
|
#include "lj_lib.h"
|
||
|
|
||
|
/* ------------------------------------------------------------------------ */
|
||
|
|
||
|
#define LJLIB_MODULE_buffer
|
||
|
|
||
|
/* Note: this uses interim structs until the SBuf reorg. */
|
||
|
|
||
|
LJLIB_CF(buffer_encode)
|
||
|
{
|
||
|
cTValue *o = lj_lib_checkany(L, 1);
|
||
|
StrBuf sbuf;
|
||
|
sbuf.sb = lj_buf_tmp_(L);
|
||
|
lj_serialize_put(&sbuf, o);
|
||
|
setstrV(L, L->top++, lj_buf_str(L, sbuf.sb));
|
||
|
lj_gc_check(L);
|
||
|
return 1;
|
||
|
}
|
||
|
|
||
|
LJLIB_CF(buffer_decode)
|
||
|
{
|
||
|
GCstr *str = lj_lib_checkstr(L, 1);
|
||
|
const char *p = strdata(str);
|
||
|
SBuf sb;
|
||
|
StrBuf sbuf;
|
||
|
setsbufL(&sb, L);
|
||
|
setmref(sb.b, p);
|
||
|
setmref(sb.p, p + str->len);
|
||
|
setmref(sb.e, p + str->len);
|
||
|
sbuf.sb = &sb;
|
||
|
sbuf.r = (char *)p;
|
||
|
setnilV(L->top++);
|
||
|
lj_serialize_get(&sbuf, L->top-1);
|
||
|
lj_gc_check(L);
|
||
|
return 1;
|
||
|
}
|
||
|
|
||
|
/* ------------------------------------------------------------------------ */
|
||
|
|
||
|
#include "lj_libdef.h"
|
||
|
|
||
|
int luaopen_string_buffer(lua_State *L)
|
||
|
{
|
||
|
LJ_LIB_REG(L, NULL, buffer);
|
||
|
return 1;
|
||
|
}
|
||
|
|
||
|
#endif
|