|
1 | 1 | /* |
2 | | -* Copyright (C) 2010 - 2023 Eluna Lua Engine <https://elunaluaengine.github.io/> |
| 2 | +* Copyright (C) 2010 - 2024 Eluna Lua Engine <https://elunaluaengine.github.io/> |
3 | 3 | * This program is free software licensed under GPL version 3 |
4 | 4 | * Please see the included DOCS/LICENSE.md for more information |
5 | 5 | */ |
6 | 6 |
|
7 | | -extern "C" |
8 | | -{ |
9 | | -#include "lua.h" |
10 | | -}; |
11 | | - |
12 | 7 | // Eluna |
13 | 8 | #include "LuaEngine.h" |
14 | 9 | #include "ElunaEventMgr.h" |
@@ -78,58 +73,28 @@ ElunaConstrainedObjectRef<Vehicle> GetWeakPtrFor(Vehicle const* obj) |
78 | 73 | #endif |
79 | 74 | #endif |
80 | 75 |
|
81 | | -// Template by Mud from http://stackoverflow.com/questions/4484437/lua-integer-type/4485511#4485511 |
82 | | -template<> int ElunaTemplate<unsigned long long>::Add(lua_State* L) { Eluna* E = Eluna::GetEluna(L); E->Push(E->CHECKVAL<unsigned long long>(1) + E->CHECKVAL<unsigned long long>(2)); return 1; } |
83 | | -template<> int ElunaTemplate<unsigned long long>::Substract(lua_State* L) { Eluna* E = Eluna::GetEluna(L); E->Push(E->CHECKVAL<unsigned long long>(1) - E->CHECKVAL<unsigned long long>(2)); return 1; } |
84 | | -template<> int ElunaTemplate<unsigned long long>::Multiply(lua_State* L) { Eluna* E = Eluna::GetEluna(L); E->Push(E->CHECKVAL<unsigned long long>(1) * E->CHECKVAL<unsigned long long>(2)); return 1; } |
85 | | -template<> int ElunaTemplate<unsigned long long>::Divide(lua_State* L) { Eluna* E = Eluna::GetEluna(L); E->Push(E->CHECKVAL<unsigned long long>(1) / E->CHECKVAL<unsigned long long>(2)); return 1; } |
86 | | -template<> int ElunaTemplate<unsigned long long>::Mod(lua_State* L) { Eluna* E = Eluna::GetEluna(L); E->Push(E->CHECKVAL<unsigned long long>(1) % E->CHECKVAL<unsigned long long>(2)); return 1; } |
87 | | -// template<> int ElunaTemplate<unsigned long long>::UnaryMinus(lua_State* L) { Eluna::GetEluna(L)->Push(-E->CHECKVAL<unsigned long long>(L, 1)); return 1; } |
88 | | -template<> int ElunaTemplate<unsigned long long>::Equal(lua_State* L) { Eluna* E = Eluna::GetEluna(L); E->Push(E->CHECKVAL<unsigned long long>(1) == E->CHECKVAL<unsigned long long>(2)); return 1; } |
89 | | -template<> int ElunaTemplate<unsigned long long>::Less(lua_State* L) { Eluna* E = Eluna::GetEluna(L); E->Push(E->CHECKVAL<unsigned long long>(1) < E->CHECKVAL<unsigned long long>(2)); return 1; } |
90 | | -template<> int ElunaTemplate<unsigned long long>::LessOrEqual(lua_State* L) { Eluna* E = Eluna::GetEluna(L); E->Push(E->CHECKVAL<unsigned long long>(1) <= E->CHECKVAL<unsigned long long>(2)); return 1; } |
91 | | -template<> int ElunaTemplate<unsigned long long>::Pow(lua_State* L) |
92 | | -{ |
93 | | - Eluna* E = Eluna::GetEluna(L); |
94 | | - E->Push(static_cast<unsigned long long>(powl(static_cast<long double>(E->CHECKVAL<unsigned long long>(1)), static_cast<long double>(E->CHECKVAL<unsigned long long>(2))))); |
95 | | - return 1; |
96 | | -} |
97 | | -template<> int ElunaTemplate<unsigned long long>::ToString(lua_State* L) |
98 | | -{ |
99 | | - Eluna* E = Eluna::GetEluna(L); |
100 | | - |
101 | | - unsigned long long l = E->CHECKVAL<unsigned long long>(1); |
102 | | - std::ostringstream ss; |
103 | | - ss << l; |
104 | | - E->Push(ss.str()); |
105 | | - return 1; |
106 | | -} |
107 | | - |
108 | | -template<> int ElunaTemplate<long long>::Add(lua_State* L) { Eluna* E = Eluna::GetEluna(L); E->Push(E->CHECKVAL<long long>(1) + E->CHECKVAL<long long>(2)); return 1; } |
109 | | -template<> int ElunaTemplate<long long>::Substract(lua_State* L) { Eluna* E = Eluna::GetEluna(L); E->Push(E->CHECKVAL<long long>(1) - E->CHECKVAL<long long>(2)); return 1; } |
110 | | -template<> int ElunaTemplate<long long>::Multiply(lua_State* L) { Eluna* E = Eluna::GetEluna(L); E->Push(E->CHECKVAL<long long>(1) * E->CHECKVAL<long long>(2)); return 1; } |
111 | | -template<> int ElunaTemplate<long long>::Divide(lua_State* L) { Eluna* E = Eluna::GetEluna(L); E->Push(E->CHECKVAL<long long>(1) / E->CHECKVAL<long long>(2)); return 1; } |
112 | | -template<> int ElunaTemplate<long long>::Mod(lua_State* L) { Eluna* E = Eluna::GetEluna(L); E->Push(E->CHECKVAL<long long>(1) % E->CHECKVAL<long long>(2)); return 1; } |
113 | | -template<> int ElunaTemplate<long long>::UnaryMinus(lua_State* L) { Eluna* E = Eluna::GetEluna(L); E->Push(-E->CHECKVAL<long long>(1)); return 1; } |
114 | | -template<> int ElunaTemplate<long long>::Equal(lua_State* L) { Eluna* E = Eluna::GetEluna(L); E->Push(E->CHECKVAL<long long>(1) == E->CHECKVAL<long long>(2)); return 1; } |
115 | | -template<> int ElunaTemplate<long long>::Less(lua_State* L) { Eluna* E = Eluna::GetEluna(L); E->Push(E->CHECKVAL<long long>(1) < E->CHECKVAL<long long>(2)); return 1; } |
116 | | -template<> int ElunaTemplate<long long>::LessOrEqual(lua_State* L) { Eluna* E = Eluna::GetEluna(L); E->Push(E->CHECKVAL<long long>(1) <= E->CHECKVAL<long long>(2)); return 1; } |
117 | | -template<> int ElunaTemplate<long long>::Pow(lua_State* L) |
118 | | -{ |
119 | | - Eluna* E = Eluna::GetEluna(L); |
120 | | - E->Push(static_cast<long long>(powl(static_cast<long double>(E->CHECKVAL<long long>(1)), static_cast<long double>(E->CHECKVAL<long long>(2))))); |
121 | | - return 1; |
122 | | -} |
123 | | -template<> int ElunaTemplate<long long>::ToString(lua_State* L) |
124 | | -{ |
125 | | - Eluna* E = Eluna::GetEluna(L); |
126 | | - |
127 | | - long long l = E->CHECKVAL<long long>(1); |
128 | | - std::ostringstream ss; |
129 | | - ss << l; |
130 | | - E->Push(ss.str()); |
131 | | - return 1; |
132 | | -} |
| 76 | +template<> int ElunaTemplate<unsigned long long>::Add(lua_State* L) { return ElunaTemplateHelper<unsigned long long>::PerformOp(L, std::plus()); } |
| 77 | +template<> int ElunaTemplate<unsigned long long>::Subtract(lua_State* L) { return ElunaTemplateHelper<unsigned long long>::PerformOp(L, std::minus()); } |
| 78 | +template<> int ElunaTemplate<unsigned long long>::Multiply(lua_State* L) { return ElunaTemplateHelper<unsigned long long>::PerformOp(L, std::multiplies()); } |
| 79 | +template<> int ElunaTemplate<unsigned long long>::Divide(lua_State* L) { return ElunaTemplateHelper<unsigned long long>::PerformOp(L, std::divides()); } |
| 80 | +template<> int ElunaTemplate<unsigned long long>::Mod(lua_State* L) { return ElunaTemplateHelper<unsigned long long>::PerformOp(L, std::modulus()); } |
| 81 | +template<> int ElunaTemplate<unsigned long long>::Equal(lua_State* L) { return ElunaTemplateHelper<unsigned long long>::PerformOp(L, std::equal_to()); } |
| 82 | +template<> int ElunaTemplate<unsigned long long>::Less(lua_State* L) { return ElunaTemplateHelper<unsigned long long>::PerformOp(L, std::less()); } |
| 83 | +template<> int ElunaTemplate<unsigned long long>::LessOrEqual(lua_State* L) { return ElunaTemplateHelper<unsigned long long>::PerformOp(L, std::less_equal()); } |
| 84 | +template<> int ElunaTemplate<unsigned long long>::ToString(lua_State* L) { return ElunaTemplateHelper<unsigned long long>::ToString(L); } |
| 85 | +template<> int ElunaTemplate<unsigned long long>::Pow(lua_State* L) { return ElunaTemplateHelper<unsigned long long>::Pow(L); } |
| 86 | + |
| 87 | +template<> int ElunaTemplate<long long>::Add(lua_State* L) { return ElunaTemplateHelper<long long>::PerformOp(L, std::plus()); } |
| 88 | +template<> int ElunaTemplate<long long>::Subtract(lua_State* L) { return ElunaTemplateHelper<long long>::PerformOp(L, std::minus()); } |
| 89 | +template<> int ElunaTemplate<long long>::Multiply(lua_State* L) { return ElunaTemplateHelper<long long>::PerformOp(L, std::multiplies()); } |
| 90 | +template<> int ElunaTemplate<long long>::Divide(lua_State* L) { return ElunaTemplateHelper<long long>::PerformOp(L, std::divides()); } |
| 91 | +template<> int ElunaTemplate<long long>::Mod(lua_State* L) { return ElunaTemplateHelper<long long>::PerformOp(L, std::modulus()); } |
| 92 | +template<> int ElunaTemplate<long long>::UnaryMinus(lua_State* L) { return ElunaTemplateHelper<long long>::PerformOp(L, std::negate()); } |
| 93 | +template<> int ElunaTemplate<long long>::Equal(lua_State* L) { return ElunaTemplateHelper<long long>::PerformOp(L, std::equal_to()); } |
| 94 | +template<> int ElunaTemplate<long long>::Less(lua_State* L) { return ElunaTemplateHelper<long long>::PerformOp(L, std::less()); } |
| 95 | +template<> int ElunaTemplate<long long>::LessOrEqual(lua_State* L) { return ElunaTemplateHelper<long long>::PerformOp(L, std::less_equal()); } |
| 96 | +template<> int ElunaTemplate<long long>::ToString(lua_State* L) { return ElunaTemplateHelper<long long>::ToString(L); } |
| 97 | +template<> int ElunaTemplate<long long>::Pow(lua_State* L) { return ElunaTemplateHelper<long long>::Pow(L); } |
133 | 98 |
|
134 | 99 | template<> int ElunaTemplate<ObjectGuid>::Equal(lua_State* L) { Eluna* E = Eluna::GetEluna(L); E->Push(E->CHECKVAL<ObjectGuid>(1) == E->CHECKVAL<ObjectGuid>(2)); return 1; } |
135 | 100 | template<> int ElunaTemplate<ObjectGuid>::ToString(lua_State* L) |
|
0 commit comments