]> git.proxmox.com Git - ceph.git/blob - ceph/src/rocksdb/include/rocksdb/utilities/lua/rocks_lua_util.h
update source to Ceph Pacific 16.2.2
[ceph.git] / ceph / src / rocksdb / include / rocksdb / utilities / lua / rocks_lua_util.h
1 // Copyright (c) 2016, Facebook, Inc. All rights reserved.
2 // This source code is licensed under both the GPLv2 (found in the
3 // COPYING file in the root directory) and Apache 2.0 License
4 // (found in the LICENSE.Apache file in the root directory).
5
6 #pragma once
7 // lua headers
8 extern "C" {
9 #include <lauxlib.h>
10 #include <lua.h>
11 #include <lualib.h>
12 }
13
14 #ifdef LUA
15 #include <string>
16 #include <vector>
17
18 #include "rocksdb/utilities/lua/rocks_lua_custom_library.h"
19
20 namespace ROCKSDB_NAMESPACE {
21 namespace lua {
22 class LuaStateWrapper {
23 public:
24 explicit LuaStateWrapper(const std::string& lua_script) {
25 lua_state_ = luaL_newstate();
26 Init(lua_script, {});
27 }
28 LuaStateWrapper(
29 const std::string& lua_script,
30 const std::vector<std::shared_ptr<RocksLuaCustomLibrary>>& libraries) {
31 lua_state_ = luaL_newstate();
32 Init(lua_script, libraries);
33 }
34 lua_State* GetLuaState() const { return lua_state_; }
35 ~LuaStateWrapper() { lua_close(lua_state_); }
36
37 private:
38 void Init(
39 const std::string& lua_script,
40 const std::vector<std::shared_ptr<RocksLuaCustomLibrary>>& libraries) {
41 if (lua_state_) {
42 luaL_openlibs(lua_state_);
43 for (const auto& library : libraries) {
44 luaL_openlib(lua_state_, library->Name(), library->Lib(), 0);
45 library->CustomSetup(lua_state_);
46 }
47 luaL_dostring(lua_state_, lua_script.c_str());
48 }
49 }
50
51 lua_State* lua_state_;
52 };
53 } // namespace lua
54 } // namespace ROCKSDB_NAMESPACE
55 #endif // LUA