1
0
Fork 0
mirror of https://github.com/luanti-org/luanti.git synced 2025-06-27 16:36:03 +00:00

Add compression API

This commit is contained in:
ShadowNinja 2014-09-14 17:42:08 -04:00
parent d6e28c19b5
commit 406ed5efac
5 changed files with 65 additions and 7 deletions

View file

@ -22,6 +22,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "common/c_converter.h"
#include "common/c_content.h"
#include "cpp_api/s_async.h"
#include "serialization.h"
#include "debug.h"
#include "porting.h"
#include "log.h"
@ -283,6 +284,40 @@ int ModApiUtil::l_get_builtin_path(lua_State *L)
return 1;
}
// compress(data, method, level)
int ModApiUtil::l_compress(lua_State *L)
{
size_t size;
const char *data = luaL_checklstring(L, 1, &size);
int level = -1;
if (!lua_isnone(L, 3) && !lua_isnil(L, 3))
level = luaL_checknumber(L, 3);
std::ostringstream os;
compressZlib(std::string(data, size), os, level);
std::string out = os.str();
lua_pushlstring(L, out.data(), out.size());
return 1;
}
// decompress(data, method)
int ModApiUtil::l_decompress(lua_State *L)
{
size_t size;
const char * data = luaL_checklstring(L, 1, &size);
std::istringstream is(std::string(data, size));
std::ostringstream os;
decompressZlib(is, os);
std::string out = os.str();
lua_pushlstring(L, out.data(), out.size());
return 1;
}
void ModApiUtil::Initialize(lua_State *L, int top)
{
@ -306,6 +341,9 @@ void ModApiUtil::Initialize(lua_State *L, int top)
API_FCT(is_yes);
API_FCT(get_builtin_path);
API_FCT(compress);
API_FCT(decompress);
}
void ModApiUtil::InitializeAsync(AsyncEngine& engine)
@ -325,5 +363,8 @@ void ModApiUtil::InitializeAsync(AsyncEngine& engine)
ASYNC_API_FCT(is_yes);
ASYNC_API_FCT(get_builtin_path);
ASYNC_API_FCT(compress);
ASYNC_API_FCT(decompress);
}