/* Minetest Copyright (C) 2013 celeron55, Perttu Ahola 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 2.1 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef C_TYPES_H_ #define C_TYPES_H_ extern "C" { #include "lua.h" } #include struct EnumString { int num; const char *str; }; class StackUnroller { private: lua_State *m_lua; int m_original_top; public: StackUnroller(lua_State *L): m_lua(L), m_original_top(-1) { m_original_top = lua_gettop(m_lua); // store stack height } ~StackUnroller() { lua_settop(m_lua, m_original_top); // restore stack height } }; class ModNameStorer { private: lua_State *L; public: ModNameStorer(lua_State *L_, const std::string modname): L(L_) { // Store current modname in registry lua_pushstring(L, modname.c_str()); lua_setfield(L, LUA_REGISTRYINDEX, "minetest_current_modname"); } ~ModNameStorer() { // Clear current modname in registry lua_pushnil(L); lua_setfield(L, LUA_REGISTRYINDEX, "minetest_current_modname"); } }; class LuaError : public std::exception { public: LuaError(lua_State *L, const std::string &s); virtual ~LuaError() throw() {} virtual const char * what() const throw() { return m_s.c_str(); } std::string m_s; }; extern EnumString es_ItemType[]; #endif /* C_TYPES_H_ */