Pioneer
Loading...
Searching...
No Matches
LuaEvent.h
Go to the documentation of this file.
1// Copyright © 2008-2023 Pioneer Developers. See AUTHORS.txt for details
2// Licensed under the terms of the GPL v3. See licenses/GPL-3.txt
3
4#ifndef _LUAEVENT_H
5#define _LUAEVENT_H
6
7#include "DeleteEmitter.h"
8#include "Lua.h"
9#include "LuaObject.h"
10#include "LuaPushPull.h"
11#include "Pi.h"
12
13namespace LuaEvent {
14
15 class ArgsBase {
16 public:
17 virtual ~ArgsBase() {}
18
19 virtual void PrepareStack(lua_State *l) const = 0;
20 };
21
22 class EmptyArgs : public ArgsBase {
23 public:
24 inline void PrepareStack(lua_State *l) const {}
25 };
26
27 template <typename...> class Args;
28
29 template <typename T0, typename T1, typename T2>
30 class Args<T0, T1, T2> : public ArgsBase {
31 public:
32 Args(T0 _arg0, T1 _arg1, T2 _arg2) :
33 arg0(_arg0),
34 arg1(_arg1),
35 arg2(_arg2) {}
36 virtual ~Args() {}
37
38 T0 arg0;
39 T1 arg1;
40 T2 arg2;
41
42 inline void PrepareStack(lua_State *l) const
43 {
44 LuaPush<T0>(l, arg0);
45 LuaPush<T1>(l, arg1);
46 LuaPush<T2>(l, arg2);
47 }
48 };
49
50 template <typename T0, typename T1>
51 class Args<T0, T1> : public ArgsBase {
52 public:
53 Args(T0 _arg0, T1 _arg1) :
54 arg0(_arg0),
55 arg1(_arg1) {}
56 virtual ~Args() {}
57
58 T0 arg0;
59 T1 arg1;
60
61 inline void PrepareStack(lua_State *l) const
62 {
63 LuaPush<T0>(l, arg0);
64 LuaPush<T1>(l, arg1);
65 }
66 };
67
68 template <typename T0>
69 class Args<T0> : public ArgsBase {
70 public:
71 Args(T0 _arg0) :
72 arg0(_arg0) {}
73 virtual ~Args() {}
74
75 T0 arg0;
76
77 inline void PrepareStack(lua_State *l) const
78 {
79 LuaPush<T0>(l, arg0);
80 }
81 };
82
83 void Clear();
84 void Emit();
85
86 void QueueInternal(const char *event, const ArgsBase &args);
87
88 template <typename... TArgs>
89 inline void Queue(const char *event, TArgs... args)
90 {
91 QueueInternal(event, Args<TArgs...>(args...));
92 }
93
94 inline void Queue(const char *event)
95 {
96 QueueInternal(event, EmptyArgs());
97 }
98} // namespace LuaEvent
99
100#endif
Definition LuaEvent.h:15
virtual void PrepareStack(lua_State *l) const =0
virtual ~ArgsBase()
Definition LuaEvent.h:17
Args(T0 _arg0, T1 _arg1, T2 _arg2)
Definition LuaEvent.h:32
void PrepareStack(lua_State *l) const
Definition LuaEvent.h:42
virtual ~Args()
Definition LuaEvent.h:36
T1 arg1
Definition LuaEvent.h:39
T2 arg2
Definition LuaEvent.h:40
T0 arg0
Definition LuaEvent.h:38
Args(T0 _arg0, T1 _arg1)
Definition LuaEvent.h:53
void PrepareStack(lua_State *l) const
Definition LuaEvent.h:61
T1 arg1
Definition LuaEvent.h:59
T0 arg0
Definition LuaEvent.h:58
virtual ~Args()
Definition LuaEvent.h:56
T0 arg0
Definition LuaEvent.h:75
Args(T0 _arg0)
Definition LuaEvent.h:71
void PrepareStack(lua_State *l) const
Definition LuaEvent.h:77
virtual ~Args()
Definition LuaEvent.h:73
Definition LuaEvent.h:27
Definition LuaEvent.h:22
void PrepareStack(lua_State *l) const
Definition LuaEvent.h:24
Definition LuaEvent.cpp:10
void Emit()
Definition LuaEvent.cpp:46
void QueueInternal(const char *event, const ArgsBase &args)
Definition LuaEvent.cpp:56
void Clear()
Definition LuaEvent.cpp:36
void Queue(const char *event, TArgs... args)
Definition LuaEvent.h:89