1 //       _________ __                 __
2 //      /   _____//  |_____________ _/  |______     ____  __ __  ______
3 //      \_____  \\   __\_  __ \__  \\   __\__  \   / ___\|  |  \/  ___/
4 //      /        \|  |  |  | \// __ \|  |  / __ \_/ /_/  >  |  /\___ |
5 //     /_______  /|__|  |__|  (____  /__| (____  /\___  /|____//____  >
6 //             \/                  \/          \//_____/            \/
7 //  ______________________                           ______________________
8 //                        T H E   W A R   B E G I N S
9 //         Stratagus - A free fantasy real time strategy game engine
10 //
11 /**@name luacallback.h. */
12 //
13 //      (c) Copyright 2008 by Francois Beerten
14 //
15 //      This program is free software; you can redistribute it and/or modify
16 //      it under the terms of the GNU General Public License as published by
17 //      the Free Software Foundation; only version 2 of the License.
18 //
19 //      This program is distributed in the hope that it will be useful,
20 //      but WITHOUT ANY WARRANTY; without even the implied warranty of
21 //      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
22 //      GNU General Public License for more details.
23 //
24 //      You should have received a copy of the GNU General Public License
25 //      along with this program; if not, write to the Free Software
26 //      Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
27 //      02111-1307, USA.
28 
29 #ifndef LUA_CALLBACK_HEADER_FILE
30 #define LUA_CALLBACK_HEADER_FILE
31 
32 #include <map>
33 #include <string>
34 #include <vector>
35 #include <utility>
36 #include <variant>
37 
38 typedef int lua_Object; // from tolua++.h
39 struct lua_State;
40 
41 class LuaCallback
42 {
43 public:
44 	LuaCallback(lua_State *lua, lua_Object luaref);
45 	~LuaCallback();
46 	void pushPreamble();
47 	void pushInteger(int value);
48 	void pushIntegers(const std::vector<int> &values);
49 	void pushString(const std::string &eventId);
50 	void pushTable(std::initializer_list<std::pair<std::string, std::variant<std::string, int>>> list);
51 	void pushTable(std::map<std::string, std::variant<std::string, int>> map);
52 	void run(int results = 0);
53 	bool popBoolean();
54 	int popInteger();
55 private:
56 	lua_State *luastate;
57 	int luaref;
58 	int arguments;
59 	int rescount;
60 	int base;
61 };
62 
63 #endif
64