Files
pip/libs/main/lua/pip_lua.h
2022-12-14 14:13:52 +03:00

89 lines
2.6 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/*! \file pip_lua.h
* \ingroup Lua
* \~\brief
* \~english Conversions between PIP types and LuaBridge
* \~russian Преобразования между типами PIP и 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 <http://www.gnu.org/licenses/>.
*/
//! \defgroup Lua Lua
//! \~\brief
//! \~english Lua programs support
//! \~russian Поддержка программ Lua
//!
//! \~\details
//! \~english \section cmake_module_Lua Building with CMake
//! \~russian \section cmake_module_Lua Сборка с использованием CMake
//!
//! \~\code
//! find_package(PIP REQUIRED)
//! target_link_libraries([target] PIP::Lua)
//! \endcode
//!
//! \~english \par Common
//! \~russian \par Общее
//!
//! \~english
//! These files provides execute Lua programs inside C++ code.
//!
//! \~russian
//! Эти файлы обеспечивают возможность выполнения программ Lua внутри C++ кода.
//!
//! \~\authors
//! \~english
//! Ivan Pelipenko peri4ko@yandex.ru;
//! Andrey Bychkov work.a.b@yandex.ru;
//! \~russian
//! Иван Пелипенко peri4ko@yandex.ru;
//! Андрей Бычков work.a.b@yandex.ru;
//!
#ifndef PIP_LUA_H
#define PIP_LUA_H
#include "lua.hpp"
#include "pistring.h"
#include <LuaBridge/LuaBridge.h>
namespace luabridge {
template<>
struct Stack<PIString> {
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; }
};
} // namespace luabridge
#endif // PIP_LUA_H