Skip to content

Commit cc71eb1

Browse files
authored
Partially revert/rewrite 39b4231 (#511)
1 parent 695f86c commit cc71eb1

File tree

3 files changed

+53
-35
lines changed

3 files changed

+53
-35
lines changed

ElunaTemplate.cpp

Lines changed: 0 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -50,38 +50,3 @@ ElunaConstrainedObjectRef<Vehicle> GetWeakPtrFor(Vehicle const* obj)
5050
}
5151
#endif
5252
#endif
53-
54-
template<> inline int ElunaTemplate<unsigned long long>::Add(lua_State* L) { return ElunaTemplateHelper<unsigned long long>::PerformOp(L, std::plus()); }
55-
template<> inline int ElunaTemplate<unsigned long long>::Subtract(lua_State* L) { return ElunaTemplateHelper<unsigned long long>::PerformOp(L, std::minus()); }
56-
template<> inline int ElunaTemplate<unsigned long long>::Multiply(lua_State* L) { return ElunaTemplateHelper<unsigned long long>::PerformOp(L, std::multiplies()); }
57-
template<> inline int ElunaTemplate<unsigned long long>::Divide(lua_State* L) { return ElunaTemplateHelper<unsigned long long>::PerformOp(L, std::divides()); }
58-
template<> inline int ElunaTemplate<unsigned long long>::Mod(lua_State* L) { return ElunaTemplateHelper<unsigned long long>::PerformOp(L, std::modulus()); }
59-
template<> inline int ElunaTemplate<unsigned long long>::Equal(lua_State* L) { return ElunaTemplateHelper<unsigned long long>::PerformOp(L, std::equal_to()); }
60-
template<> inline int ElunaTemplate<unsigned long long>::Less(lua_State* L) { return ElunaTemplateHelper<unsigned long long>::PerformOp(L, std::less()); }
61-
template<> inline int ElunaTemplate<unsigned long long>::LessOrEqual(lua_State* L) { return ElunaTemplateHelper<unsigned long long>::PerformOp(L, std::less_equal()); }
62-
template<> inline int ElunaTemplate<unsigned long long>::ToString(lua_State* L) { return ElunaTemplateHelper<unsigned long long>::ToString(L); }
63-
template<> inline int ElunaTemplate<unsigned long long>::Pow(lua_State* L) { return ElunaTemplateHelper<unsigned long long>::Pow(L); }
64-
65-
template<> inline int ElunaTemplate<long long>::Add(lua_State* L) { return ElunaTemplateHelper<long long>::PerformOp(L, std::plus()); }
66-
template<> inline int ElunaTemplate<long long>::Subtract(lua_State* L) { return ElunaTemplateHelper<long long>::PerformOp(L, std::minus()); }
67-
template<> inline int ElunaTemplate<long long>::Multiply(lua_State* L) { return ElunaTemplateHelper<long long>::PerformOp(L, std::multiplies()); }
68-
template<> inline int ElunaTemplate<long long>::Divide(lua_State* L) { return ElunaTemplateHelper<long long>::PerformOp(L, std::divides()); }
69-
template<> inline int ElunaTemplate<long long>::Mod(lua_State* L) { return ElunaTemplateHelper<long long>::PerformOp(L, std::modulus()); }
70-
template<> inline int ElunaTemplate<long long>::UnaryMinus(lua_State* L) { return ElunaTemplateHelper<long long>::PerformOp(L, std::negate()); }
71-
template<> inline int ElunaTemplate<long long>::Equal(lua_State* L) { return ElunaTemplateHelper<long long>::PerformOp(L, std::equal_to()); }
72-
template<> inline int ElunaTemplate<long long>::Less(lua_State* L) { return ElunaTemplateHelper<long long>::PerformOp(L, std::less()); }
73-
template<> inline int ElunaTemplate<long long>::LessOrEqual(lua_State* L) { return ElunaTemplateHelper<long long>::PerformOp(L, std::less_equal()); }
74-
template<> inline int ElunaTemplate<long long>::ToString(lua_State* L) { return ElunaTemplateHelper<long long>::ToString(L); }
75-
template<> inline int ElunaTemplate<long long>::Pow(lua_State* L) { return ElunaTemplateHelper<long long>::Pow(L); }
76-
77-
template<> inline int ElunaTemplate<ObjectGuid>::Equal(lua_State* L) { Eluna* E = Eluna::GetEluna(L); E->Push(E->CHECKVAL<ObjectGuid>(1) == E->CHECKVAL<ObjectGuid>(2)); return 1; }
78-
template<> inline int ElunaTemplate<ObjectGuid>::ToString(lua_State* L)
79-
{
80-
Eluna* E = Eluna::GetEluna(L);
81-
#if defined ELUNA_TRINITY
82-
E->Push(E->CHECKVAL<ObjectGuid>(1).ToString());
83-
#else
84-
E->Push(E->CHECKVAL<ObjectGuid>(1).GetString());
85-
#endif
86-
return 1;
87-
}

ElunaTemplate.h

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,18 @@ class ElunaObjectValueImpl : public ElunaObject
141141
T _obj;
142142
};
143143

144+
#define ELUNA_MATH_OP(type, func, op) \
145+
template<> \
146+
static int ElunaTemplate<type>::func(lua_State* L) { \
147+
return ElunaTemplateHelper<type>::PerformOp(L, std::op()); \
148+
}
149+
150+
#define ELUNA_SIMPLE_FORWARD(type, func) \
151+
template<> \
152+
static int ElunaTemplate<type>::func(lua_State* L) { \
153+
return ElunaTemplateHelper<type>::func(L); \
154+
}
155+
144156
#define MAKE_ELUNA_OBJECT_VALUE_IMPL(type) \
145157
template <> \
146158
class ElunaObjectImpl<type> : public ElunaObjectValueImpl<type> \

methods/Methods.cpp

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,47 @@
3333
#include "BattleGroundMethods.h"
3434
#include "CustomMethodsInterface.h"
3535

36+
ELUNA_MATH_OP(unsigned long long, Add, plus)
37+
ELUNA_MATH_OP(unsigned long long, Subtract, minus)
38+
ELUNA_MATH_OP(unsigned long long, Multiply, multiplies)
39+
ELUNA_MATH_OP(unsigned long long, Divide, divides)
40+
ELUNA_MATH_OP(unsigned long long, Mod, modulus)
41+
ELUNA_MATH_OP(unsigned long long, Equal, equal_to)
42+
ELUNA_MATH_OP(unsigned long long, Less, less)
43+
ELUNA_MATH_OP(unsigned long long, LessOrEqual, less_equal)
44+
ELUNA_SIMPLE_FORWARD(unsigned long long, ToString)
45+
ELUNA_SIMPLE_FORWARD(unsigned long long, Pow)
46+
47+
ELUNA_MATH_OP(long long, Add, plus)
48+
ELUNA_MATH_OP(long long, Subtract, minus)
49+
ELUNA_MATH_OP(long long, Multiply, multiplies)
50+
ELUNA_MATH_OP(long long, Divide, divides)
51+
ELUNA_MATH_OP(long long, Mod, modulus)
52+
ELUNA_MATH_OP(long long, UnaryMinus, negate)
53+
ELUNA_MATH_OP(long long, Equal, equal_to)
54+
ELUNA_MATH_OP(long long, Less, less)
55+
ELUNA_MATH_OP(long long, LessOrEqual, less_equal)
56+
ELUNA_SIMPLE_FORWARD(long long, ToString)
57+
ELUNA_SIMPLE_FORWARD(long long, Pow)
58+
59+
template<> int ElunaTemplate<ObjectGuid>::Equal(lua_State* L)
60+
{
61+
Eluna* E = Eluna::GetEluna(L);
62+
E->Push(E->CHECKVAL<ObjectGuid>(1) == E->CHECKVAL<ObjectGuid>(2));
63+
return 1;
64+
}
65+
66+
template<> int ElunaTemplate<ObjectGuid>::ToString(lua_State* L)
67+
{
68+
Eluna* E = Eluna::GetEluna(L);
69+
#if defined ELUNA_TRINITY
70+
E->Push(E->CHECKVAL<ObjectGuid>(1).ToString());
71+
#else
72+
E->Push(E->CHECKVAL<ObjectGuid>(1).GetString());
73+
#endif
74+
return 1;
75+
}
76+
3677
void RegisterMethods(Eluna* E)
3778
{
3879
ElunaTemplate<>::SetMethods(E, LuaGlobalFunctions::GlobalMethods);

0 commit comments

Comments
 (0)