// Copyright (c) 2016, Facebook, Inc. All rights reserved. // This source code is licensed under both the GPLv2 (found in the // COPYING file in the root directory) and Apache 2.0 License // (found in the LICENSE.Apache file in the root directory). #pragma once // lua headers extern "C" { #include #include #include } #ifdef LUA #include #include #include "rocksdb/utilities/lua/rocks_lua_custom_library.h" namespace ROCKSDB_NAMESPACE { namespace lua { class LuaStateWrapper { public: explicit LuaStateWrapper(const std::string& lua_script) { lua_state_ = luaL_newstate(); Init(lua_script, {}); } LuaStateWrapper( const std::string& lua_script, const std::vector>& libraries) { lua_state_ = luaL_newstate(); Init(lua_script, libraries); } lua_State* GetLuaState() const { return lua_state_; } ~LuaStateWrapper() { lua_close(lua_state_); } private: void Init( const std::string& lua_script, const std::vector>& libraries) { if (lua_state_) { luaL_openlibs(lua_state_); for (const auto& library : libraries) { luaL_openlib(lua_state_, library->Name(), library->Lib(), 0); library->CustomSetup(lua_state_); } luaL_dostring(lua_state_, lua_script.c_str()); } } lua_State* lua_state_; }; } // namespace lua } // namespace ROCKSDB_NAMESPACE #endif // LUA