Files
fs2open.github.com/code/scripting/lua/LuaThread.h
T
asarium 08c6e0d072 Introduce error state of promises
This is necessary after all to properly clean up resources if an
operation becomes invalid.

Also bumps Visual Studio version to 2017 on Appveyor.
2020-05-24 22:07:09 +02:00

78 lines
1.7 KiB
C++

#pragma once
#include "LuaConvert.h"
#include "LuaTypes.h"
#include "LuaValue.h"
#include "LuaFunction.h"
#include <iterator>
namespace luacpp {
/**
* @brief Class to improve handling of lua threads (aka coroutines).
*
* This class provides a high-level interface to lua threads.
*
* @see LuaConvert
*/
class LuaThread : public LuaValue {
public:
using ErrorCallback = std::function<bool(lua_State* mainState, lua_State* thread)>;
struct ResumeState
{
bool completed = false;
LuaValueList returnVals;
};
/**
* @brief Creates a new empty thread.
*/
static LuaThread create(lua_State* L, const LuaFunction& func);
/**
* @brief Default constructor
*/
LuaThread();
/**
* @brief Copy-constructor
* @param other The other thread.
*/
LuaThread(const LuaThread&);
LuaThread& operator=(const LuaThread&);
// These should be noexcept but Visual Studio doesn't like that yet in a recent enough version
LuaThread(LuaThread&&); // NOLINT(performance-noexcept-move-constructor)
LuaThread& operator=(LuaThread&&); // NOLINT(performance-noexcept-move-constructor)
~LuaThread() override;
/**
* @brief Sets a new reference.
* This overload checks if the passed reference is a thread
*
* @param ref The new reference
* @return void
*/
void setReference(const LuaReference& ref) override;
void setErrorCallback(ErrorCallback errorCallback);
ResumeState resume(const LuaValueList& params) const;
lua_State* getThreadHandle() const;
private:
LuaThread(lua_State* luaState, lua_State* threadHandle);
lua_State* _thread = nullptr;
ErrorCallback _errorCallback;
};
namespace convert {
bool popValue(lua_State* luaState, LuaThread& target, int stackposition = -1, bool remove = true);
}
} // namespace luacpp