diff options
author | madmaxoft <github@xoft.cz> | 2013-08-04 23:11:25 +0200 |
---|---|---|
committer | madmaxoft <github@xoft.cz> | 2013-08-04 23:11:25 +0200 |
commit | 71bb41ee86e262103909d8007dbc2ef876cd0b24 (patch) | |
tree | a15d4fb94f09f9e80585c24a69bdcecb00722850 /source/LuaState.h | |
parent | cWorld: Added a self-test for LineBlockTracer, disabled by an #ifdef. (diff) | |
download | cuberite-71bb41ee86e262103909d8007dbc2ef876cd0b24.tar cuberite-71bb41ee86e262103909d8007dbc2ef876cd0b24.tar.gz cuberite-71bb41ee86e262103909d8007dbc2ef876cd0b24.tar.bz2 cuberite-71bb41ee86e262103909d8007dbc2ef876cd0b24.tar.lz cuberite-71bb41ee86e262103909d8007dbc2ef876cd0b24.tar.xz cuberite-71bb41ee86e262103909d8007dbc2ef876cd0b24.tar.zst cuberite-71bb41ee86e262103909d8007dbc2ef876cd0b24.zip |
Diffstat (limited to '')
-rw-r--r-- | source/LuaState.h | 90 |
1 files changed, 90 insertions, 0 deletions
diff --git a/source/LuaState.h b/source/LuaState.h new file mode 100644 index 000000000..10ff53911 --- /dev/null +++ b/source/LuaState.h @@ -0,0 +1,90 @@ + +// LuaState.h + +// Declares the cLuaState class representing the wrapper over lua_State *, provides associated helper functions + + + + + +#pragma once + + + + + +// fwd: lua.h +struct lua_State; + + + + + +class cLuaState +{ +public: + /** Creates a new instance. The LuaState is not initialized. + a_SubsystemName is used for reporting problems in the console, it is "plugin %s" for plugins, + or "LuaScript" for the cLuaScript template + */ + cLuaState(const AString & a_SubsystemName); + + ~cLuaState(); + + operator lua_State * (void) { return m_LuaState; } + + /// Creates the m_LuaState, if not closed already + void Create(void); + + /// Closes the m_LuaState, if not closed already + void Close(void); + + /// Returns true if the m_LuaState is valid + bool IsValid(void) const { return (m_LuaState != NULL); } + + /** Loads the specified file + Returns false and logs a warning to the console if not successful (but the LuaState is kept open). + m_SubsystemName is displayed in the warning log message. + */ + bool LoadFile(const AString & a_FileName); + + /** Pushes the function of the specified name onto the stack. + Returns true if successful. + If a_ShouldLogFail is true, logs a warning on failure (incl. m_SubsystemName) + */ + bool PushFunction(const char * a_FunctionName, bool a_ShouldLogFailure = true); + + /** Pushes a function that has been saved into the global registry, identified by a_FnRef. + Returns true if successful. Logs a warning on failure + */ + bool PushFunctionFromRegistry(int a_FnRef); + + /// Pushes a string vector, as a table, onto the stack + void PushStringVector(const AStringVector & a_Vector); + + /** + Calls the function that has been pushed onto the stack by PushFunction. + Returns true if successful, logs a warning on failure. + a_FunctionName is used only for the warning log message, the function + to be called must be pushed by PushFunction() beforehand. + */ + bool CallFunction(int a_NumArgs, int a_NumResults, const char * a_FunctionName); + + /// If the status is nonzero, prints the text on the top of Lua stack and returns true + bool ReportErrors(int status); + + /// If the status is nonzero, prints the text on the top of Lua stack and returns true + static bool ReportErrors(lua_State * a_LuaState, int status); + +protected: + lua_State * m_LuaState; + + /** The subsystem name is used for reporting errors to the console, it is either "plugin %s" or "LuaScript" + whatever is given to the constructor + */ + AString m_SubsystemName; +} ; + + + + |