aboutsummaryrefslogtreecommitdiff
path: root/src/script/lua_api
diff options
context:
space:
mode:
authorShadowNinja <shadowninja@minetest.net>2014-09-14 17:42:08 -0400
committerShadowNinja <shadowninja@minetest.net>2014-09-20 14:02:54 -0400
commit406ed5efac68af31c3cc7a0e7401ebf4dd419804 (patch)
tree377b40c24e5bcd73a773018e10636172c808276e /src/script/lua_api
parentd6e28c19b59e336f4581682baacb6afb66956f95 (diff)
downloadminetest-406ed5efac68af31c3cc7a0e7401ebf4dd419804.tar.gz
minetest-406ed5efac68af31c3cc7a0e7401ebf4dd419804.tar.bz2
minetest-406ed5efac68af31c3cc7a0e7401ebf4dd419804.zip
Add compression API
Diffstat (limited to 'src/script/lua_api')
-rw-r--r--src/script/lua_api/l_util.cpp41
-rw-r--r--src/script/lua_api/l_util.h6
2 files changed, 47 insertions, 0 deletions
diff --git a/src/script/lua_api/l_util.cpp b/src/script/lua_api/l_util.cpp
index 57db632c9..dda5b5abf 100644
--- a/src/script/lua_api/l_util.cpp
+++ b/src/script/lua_api/l_util.cpp
@@ -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);
}
diff --git a/src/script/lua_api/l_util.h b/src/script/lua_api/l_util.h
index cfdeea1e8..e82432381 100644
--- a/src/script/lua_api/l_util.h
+++ b/src/script/lua_api/l_util.h
@@ -81,6 +81,12 @@ private:
// get_scriptdir()
static int l_get_builtin_path(lua_State *L);
+ // compress(data, method, ...)
+ static int l_compress(lua_State *L);
+
+ // decompress(data, method, ...)
+ static int l_decompress(lua_State *L);
+
public:
static void Initialize(lua_State *L, int top);