/*! \file pip_lua.h * \brief PIP Lua bindings * * This file declare conversions for PIP types via LuaBridge */ /* PIP - Platform Independent Primitives PIP Lua bindings Andrey Bychkov work.a.b@yandex.ru This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see . */ #ifndef PIP_LUA_H #define PIP_LUA_H extern "C" { # include "lua.h" # include "lauxlib.h" # include "lualib.h" } #include #include "pistring.h" namespace luabridge { template <> struct Stack { static void push (lua_State* L, PIString const& str) { lua_pushstring(L, str.dataUTF8()); } static PIString get (lua_State* L, int index) { if (lua_type(L, index) == LUA_TSTRING) { const char* str = lua_tostring(L, index); return PIString::fromUTF8(str); } lua_pushvalue(L, index); const char* str = lua_tostring(L, -1); PIString string = PIString::fromUTF8(str); lua_pop(L, 1); return string; } static bool isInstance (lua_State* L, int index) { return lua_type(L, index) == LUA_TSTRING; } }; } #endif // PIP_LUA_H