diff options
author | ShadowNinja <shadowninja@minetest.net> | 2014-09-14 17:42:08 -0400 |
---|---|---|
committer | ShadowNinja <shadowninja@minetest.net> | 2014-09-20 14:02:54 -0400 |
commit | 406ed5efac68af31c3cc7a0e7401ebf4dd419804 (patch) | |
tree | 377b40c24e5bcd73a773018e10636172c808276e /src/script | |
parent | d6e28c19b59e336f4581682baacb6afb66956f95 (diff) | |
download | minetest-406ed5efac68af31c3cc7a0e7401ebf4dd419804.tar.gz minetest-406ed5efac68af31c3cc7a0e7401ebf4dd419804.tar.bz2 minetest-406ed5efac68af31c3cc7a0e7401ebf4dd419804.zip |
Add compression API
Diffstat (limited to 'src/script')
-rw-r--r-- | src/script/lua_api/l_util.cpp | 41 | ||||
-rw-r--r-- | src/script/lua_api/l_util.h | 6 |
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); |