diff options
Diffstat (limited to 'Sluift/Lua')
-rw-r--r-- | Sluift/Lua/Check.cpp | 12 | ||||
-rw-r--r-- | Sluift/Lua/Check.h | 5 | ||||
-rw-r--r-- | Sluift/Lua/LuaUtils.cpp | 8 | ||||
-rw-r--r-- | Sluift/Lua/LuaUtils.h | 2 |
4 files changed, 25 insertions, 2 deletions
diff --git a/Sluift/Lua/Check.cpp b/Sluift/Lua/Check.cpp index 65ada7b..a9b8f02 100644 --- a/Sluift/Lua/Check.cpp +++ b/Sluift/Lua/Check.cpp @@ -1,4 +1,4 @@ /* - * Copyright (c) 2013 Remko Tronçon + * Copyright (c) 2013-2014 Remko Tronçon * Licensed under the GNU General Public License. * See the COPYING file for more information. @@ -13,4 +13,5 @@ #include <Sluift/Lua/Exception.h> +#include <Swiften/Base/ByteArray.h> using namespace Swift; @@ -44,4 +45,13 @@ std::string Lua::checkString(lua_State* L, int arg) { } +ByteArray Lua::checkByteArray(lua_State* L, int arg) { + size_t len; + const char *s = lua_tolstring(L, arg, &len); + if (!s) { + throw Lua::Exception(getArgTypeError(L, arg, LUA_TSTRING)); + } + return createByteArray(s, len); +} + void* Lua::checkUserDataRaw(lua_State* L, int arg) { void* userData = lua_touserdata(L, arg); diff --git a/Sluift/Lua/Check.h b/Sluift/Lua/Check.h index 8a8b64a..c22751b 100644 --- a/Sluift/Lua/Check.h +++ b/Sluift/Lua/Check.h @@ -1,4 +1,4 @@ /* - * Copyright (c) 2013 Remko Tronçon + * Copyright (c) 2013-2014 Remko Tronçon * Licensed under the GNU General Public License. * See the COPYING file for more information. @@ -9,4 +9,6 @@ #include <string> +#include <Swiften/Base/ByteArray.h> + struct lua_State; @@ -16,4 +18,5 @@ namespace Swift { int checkIntNumber(lua_State* L, int arg); std::string checkString(lua_State* L, int arg); + ByteArray checkByteArray(lua_State* L, int arg); void* checkUserDataRaw(lua_State* L, int arg); diff --git a/Sluift/Lua/LuaUtils.cpp b/Sluift/Lua/LuaUtils.cpp index 915f3cc..dbadaab 100644 --- a/Sluift/Lua/LuaUtils.cpp +++ b/Sluift/Lua/LuaUtils.cpp @@ -190,2 +190,10 @@ void Swift::Lua::registerExtraHelp(lua_State* L, int index, const std::string& n lua_pop(L, 3); } + +void Swift::Lua::pushStringArray(lua_State* L, const std::vector<std::string>& strings) { + lua_createtable(L, strings.size(), 0); + for (size_t i = 0; i < strings.size(); ++i) { + lua_pushstring(L, strings[i].c_str()); + lua_rawseti(L, -2, boost::numeric_cast<int>(i+1)); + } +} diff --git a/Sluift/Lua/LuaUtils.h b/Sluift/Lua/LuaUtils.h index 105f249..ed4fcc1 100644 --- a/Sluift/Lua/LuaUtils.h +++ b/Sluift/Lua/LuaUtils.h @@ -38,4 +38,6 @@ namespace Swift { boost::optional<bool> getBooleanField(lua_State* L, int index, const std::string&); boost::optional<int> getIntField(lua_State* L, int index, const std::string&); + + void pushStringArray(lua_State* L, const std::vector<std::string>& strings); } } |