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 #ifdef LUA 8 9 // lua headers 10 extern "C" { 11 #include <lauxlib.h> 12 #include <lua.h> 13 #include <lualib.h> 14 } 15 16 namespace ROCKSDB_NAMESPACE { 17 namespace lua { 18 // A class that used to define custom C Library that is callable 19 // from Lua script 20 class RocksLuaCustomLibrary { 21 public: ~RocksLuaCustomLibrary()22 virtual ~RocksLuaCustomLibrary() {} 23 // The name of the C library. This name will also be used as the table 24 // (namespace) in Lua that contains the C library. 25 virtual const char* Name() const = 0; 26 27 // Returns a "static const struct luaL_Reg[]", which includes a list of 28 // C functions. Note that the last entry of this static array must be 29 // {nullptr, nullptr} as required by Lua. 30 // 31 // More details about how to implement Lua C libraries can be found 32 // in the official Lua document http://www.lua.org/pil/26.2.html 33 virtual const struct luaL_Reg* Lib() const = 0; 34 35 // A function that will be called right after the library has been created 36 // and pushed on the top of the lua_State. This custom setup function 37 // allows developers to put additional table or constant values inside 38 // the same table / namespace. CustomSetup(lua_State *)39 virtual void CustomSetup(lua_State* /*L*/) const {} 40 }; 41 } // namespace lua 42 } // namespace ROCKSDB_NAMESPACE 43 #endif // LUA 44