diff options
Diffstat (limited to 'crawl-ref/source/cluautil.cc')
-rw-r--r-- | crawl-ref/source/cluautil.cc | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/crawl-ref/source/cluautil.cc b/crawl-ref/source/cluautil.cc index fe0ba1cd93..2a9cfe47bb 100644 --- a/crawl-ref/source/cluautil.cc +++ b/crawl-ref/source/cluautil.cc @@ -98,3 +98,26 @@ void clua_register_metatable(lua_State *ls, const char *tn, luaL_openlib(ls, NULL, lr, 0); } } + + +template <typename list, typename lpush> +static int dlua_gentable(lua_State *ls, const list &strings, lpush push) +{ + lua_newtable(ls); + for (int i = 0, size = strings.size(); i < size; ++i) + { + push(ls, strings[i]); + lua_rawseti(ls, -2, i + 1); + } + return (1); +} + +inline static void dlua_pushcxxstring(lua_State *ls, const std::string &s) +{ + lua_pushstring(ls, s.c_str()); +} + +int dlua_stringtable(lua_State *ls, const std::vector<std::string> &s) +{ + return dlua_gentable(ls, s, dlua_pushcxxstring); +} |