1/**
2 * Copyright (c) 2006-2023 LOVE Development Team
3 *
4 * This software is provided 'as-is', without any express or implied
5 * warranty. In no event will the authors be held liable for any damages
6 * arising from the use of this software.
7 *
8 * Permission is granted to anyone to use this software for any purpose,
9 * including commercial applications, and to alter it and redistribute it
10 * freely, subject to the following restrictions:
11 *
12 * 1. The origin of this software must not be misrepresented; you must not
13 * claim that you wrote the original software. If you use this software
14 * in a product, an acknowledgment in the product documentation would be
15 * appreciated but is not required.
16 * 2. Altered source versions must be plainly marked as such, and must not be
17 * misrepresented as being the original software.
18 * 3. This notice may not be removed or altered from any source distribution.
19 **/
20
21#ifndef LOVE_THREAD_LUATHREAD_H
22#define LOVE_THREAD_LUATHREAD_H
23
24// STL
25#include <string>
26#include <vector>
27
28// LOVE
29#include "common/Data.h"
30#include "common/Object.h"
31#include "common/Variant.h"
32#include "threads.h"
33
34namespace love
35{
36namespace thread
37{
38
39class LuaThread : public Threadable
40{
41public:
42
43 static love::Type type;
44
45 LuaThread(const std::string &name, love::Data *code);
46 virtual ~LuaThread();
47 void threadFunction();
48 const std::string &getError() const;
49 bool hasError() const { return haserror; }
50
51 bool start(const std::vector<Variant> &args);
52
53private:
54
55 void onError();
56
57 StrongRef<love::Data> code;
58 std::string name;
59 std::string error;
60 bool haserror;
61
62 std::vector<Variant> args;
63
64}; // LuaThread
65
66} // thread
67} // love
68
69#endif // LOVE_THREAD_LUATHREAD_H
70