summaryrefslogtreecommitdiffstats
path: root/src/Bindings/ManualBindings.h
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/Bindings/ManualBindings.h235
1 files changed, 52 insertions, 183 deletions
diff --git a/src/Bindings/ManualBindings.h b/src/Bindings/ManualBindings.h
index dc9d9462f..64a44a240 100644
--- a/src/Bindings/ManualBindings.h
+++ b/src/Bindings/ManualBindings.h
@@ -1,4 +1,4 @@
-
+
// ManualBindings.h
// Declares the cManualBindings class used as a namespace for functions exported to the Lua API manually
@@ -57,7 +57,7 @@ public:
template <
class Ty1,
class Ty2,
- bool (Ty1::*DoWithFn)(const AString &, cItemCallback<Ty2> &)
+ bool (Ty1::*DoWithFn)(const AString &, const std::function<bool(Ty2 &)> &)
>
static int DoWith(lua_State * tolua_S)
{
@@ -89,28 +89,14 @@ public:
return lua_do_error(tolua_S, "Error in function call '#funcname#': Expected a valid callback function for parameter #2");
}
- class cLuaCallback : public cItemCallback<Ty2>
- {
- public:
- cLuaCallback(cLuaState & a_LuaState, cLuaState::cRef & a_FnRef):
- m_LuaState(a_LuaState),
- m_FnRef(a_FnRef)
- {
- }
-
- private:
- virtual bool Item(Ty2 * a_Item) override
+ // Call the DoWith function:
+ bool res = (Self->*DoWithFn)(ItemName, [&](Ty2 & a_Item)
{
bool ret = false;
- m_LuaState.Call(m_FnRef, a_Item, cLuaState::Return, ret);
+ L.Call(FnRef, &a_Item, cLuaState::Return, ret);
return ret;
}
- cLuaState & m_LuaState;
- cLuaState::cRef & m_FnRef;
- } Callback(L, FnRef);
-
- // Call the DoWith function:
- bool res = (Self->*DoWithFn)(ItemName, Callback);
+ );
// Push the result as the return value:
L.Push(res);
@@ -125,7 +111,7 @@ public:
template <
class Ty1,
class Ty2,
- bool (Ty1::*DoWithFn)(const AString &, cItemCallback<Ty2> &)
+ bool (Ty1::*DoWithFn)(const AString &, const std::function<bool(Ty2 &)> &)
>
static int StaticDoWith(lua_State * tolua_S)
{
@@ -152,28 +138,14 @@ public:
return lua_do_error(tolua_S, "Error in function call '#funcname#': Expected a valid callback function for parameter #2");
}
- class cLuaCallback : public cItemCallback<Ty2>
- {
- public:
- cLuaCallback(cLuaState & a_LuaState, cLuaState::cRef & a_FnRef):
- m_LuaState(a_LuaState),
- m_FnRef(a_FnRef)
- {
- }
-
- private:
- virtual bool Item(Ty2 * a_Item) override
+ // Call the DoWith function:
+ bool res = (Ty1::Get()->*DoWithFn)(ItemName, [&](Ty2 & a_Item)
{
bool ret = false;
- m_LuaState.Call(m_FnRef, a_Item, cLuaState::Return, ret);
+ L.Call(FnRef, &a_Item, cLuaState::Return, ret);
return ret;
}
- cLuaState & m_LuaState;
- cLuaState::cRef & m_FnRef;
- } Callback(L, FnRef);
-
- // Call the DoWith function:
- bool res = (Ty1::Get()->*DoWithFn)(ItemName, Callback);
+ );
// Push the result as the return value:
L.Push(res);
@@ -187,7 +159,7 @@ public:
template <
class Ty1,
class Ty2,
- bool (Ty1::*DoWithFn)(UInt32, cItemCallback<Ty2> &)
+ bool (Ty1::*DoWithFn)(UInt32, const std::function<bool(Ty2 &)> &)
>
static int DoWithID(lua_State * tolua_S)
{
@@ -215,28 +187,14 @@ public:
return lua_do_error(tolua_S, "Error in function call '#funcname#': Expected a valid callback function for parameter #2");
}
- class cLuaCallback : public cItemCallback<Ty2>
- {
- public:
- cLuaCallback(cLuaState & a_LuaState, cLuaState::cRef & a_FnRef):
- m_LuaState(a_LuaState),
- m_FnRef(a_FnRef)
- {
- }
-
- private:
- virtual bool Item(Ty2 * a_Item) override
+ // Call the DoWith function:
+ bool res = (Self->*DoWithFn)(ItemID, [&](Ty2 & a_Item)
{
bool ret = false;
- m_LuaState.Call(m_FnRef, a_Item, cLuaState::Return, ret);
+ L.Call(FnRef, &a_Item, cLuaState::Return, ret);
return ret;
}
- cLuaState & m_LuaState;
- cLuaState::cRef & m_FnRef;
- } Callback(L, FnRef);
-
- // Call the DoWith function:
- bool res = (Self->*DoWithFn)(ItemID, Callback);
+ );
// Push the result as the return value:
L.Push(res);
@@ -251,7 +209,7 @@ public:
template <
class SELF,
class ITEM,
- bool (SELF::*DoWithFn)(int, int, int, cItemCallback<ITEM> &)
+ bool (SELF::*DoWithFn)(int, int, int, const std::function<bool(ITEM &)> &)
>
static int DoWithXYZ(lua_State * tolua_S)
{
@@ -282,28 +240,14 @@ public:
return lua_do_error(tolua_S, "Error in function call '#funcname#': Expected a valid callback function for parameter #5");
}
- class cLuaCallback : public cItemCallback<ITEM>
- {
- public:
- cLuaCallback(cLuaState & a_LuaState, cLuaState::cRef & a_FnRef):
- m_LuaState(a_LuaState),
- m_FnRef(a_FnRef)
- {
- }
-
- private:
- virtual bool Item(ITEM * a_Item) override
+ // Call the DoWith function:
+ bool res = (Self->*DoWithFn)(BlockX, BlockY, BlockZ, [&](ITEM & a_Item)
{
bool ret = false;
- m_LuaState.Call(m_FnRef, a_Item, cLuaState::Return, ret);
+ L.Call(FnRef, &a_Item, cLuaState::Return, ret);
return ret;
}
- cLuaState & m_LuaState;
- cLuaState::cRef & m_FnRef;
- } Callback(L, FnRef);
-
- // Call the DoWith function:
- bool res = (Self->*DoWithFn)(BlockX, BlockY, BlockZ, Callback);
+ );
// Push the result as the return value:
L.Push(res);
@@ -318,7 +262,7 @@ public:
template <
class SELF,
class ITEM,
- bool (SELF::*DoWithFn)(int, int, int, cItemCallback<ITEM> &),
+ bool (SELF::*DoWithFn)(int, int, int, const std::function<bool(ITEM &)> &),
bool (SELF::*CoordCheckFn)(int, int, int) const
>
static int DoWithXYZ(lua_State * tolua_S)
@@ -356,28 +300,14 @@ public:
).c_str());
}
- class cLuaCallback : public cItemCallback<ITEM>
- {
- public:
- cLuaCallback(cLuaState & a_LuaState, cLuaState::cRef & a_FnRef):
- m_LuaState(a_LuaState),
- m_FnRef(a_FnRef)
- {
- }
-
- private:
- virtual bool Item(ITEM * a_Item) override
+ // Call the DoWith function:
+ bool res = (Self->*DoWithFn)(BlockX, BlockY, BlockZ, [&](ITEM & a_Item)
{
bool ret = false;
- m_LuaState.Call(m_FnRef, a_Item, cLuaState::Return, ret);
+ L.Call(FnRef, &a_Item, cLuaState::Return, ret);
return ret;
}
- cLuaState & m_LuaState;
- cLuaState::cRef & m_FnRef;
- } Callback(L, FnRef);
-
- // Call the DoWith function:
- bool res = (Self->*DoWithFn)(BlockX, BlockY, BlockZ, Callback);
+ );
// Push the result as the return value:
L.Push(res);
@@ -391,7 +321,7 @@ public:
template <
class Ty1,
class Ty2,
- bool (Ty1::*ForEachFn)(int, int, cItemCallback<Ty2> &)
+ bool (Ty1::*ForEachFn)(int, int, const std::function<bool(Ty2 &)> &)
>
static int ForEachInChunk(lua_State * tolua_S)
{
@@ -421,28 +351,14 @@ public:
return lua_do_error(tolua_S, "Error in function call '#funcname#': Expected a valid callback function for parameter #4");
}
- class cLuaCallback : public cItemCallback<Ty2>
- {
- public:
- cLuaCallback(cLuaState & a_LuaState, cLuaState::cRef & a_FnRef):
- m_LuaState(a_LuaState),
- m_FnRef(a_FnRef)
- {
- }
-
- private:
- virtual bool Item(Ty2 * a_Item) override
+ // Call the DoWith function:
+ bool res = (Self->*ForEachFn)(ChunkX, ChunkZ, [&](Ty2 & a_Item)
{
bool ret = false;
- m_LuaState.Call(m_FnRef, a_Item, cLuaState::Return, ret);
+ L.Call(FnRef, &a_Item, cLuaState::Return, ret);
return ret;
}
- cLuaState & m_LuaState;
- cLuaState::cRef & m_FnRef;
- } Callback(L, FnRef);
-
- // Call the DoWith function:
- bool res = (Self->*ForEachFn)(ChunkX, ChunkZ, Callback);
+ );
// Push the result as the return value:
L.Push(res);
@@ -456,7 +372,7 @@ public:
template <
class Ty1,
class Ty2,
- bool (Ty1::*ForEachFn)(const cBoundingBox &, cItemCallback<Ty2> &)
+ bool (Ty1::*ForEachFn)(const cBoundingBox &, const std::function<bool(Ty2 &)> &)
>
static int ForEachInBox(lua_State * tolua_S)
{
@@ -488,36 +404,19 @@ public:
return lua_do_error(tolua_S, "Error in function call '#funcname#': Expected a valid callback function for parameter #2");
}
- // Callback wrapper for the Lua function:
- class cLuaCallback : public cItemCallback<Ty2>
- {
- public:
- cLuaCallback(cLuaState & a_LuaState, cLuaState::cRef & a_FuncRef) :
- m_LuaState(a_LuaState),
- m_FnRef(a_FuncRef)
+ bool res = (Self->*ForEachFn)(*Box, [&](Ty2 & a_Item)
{
- }
-
- private:
- cLuaState & m_LuaState;
- cLuaState::cRef & m_FnRef;
-
- // cItemCallback<Ty2> overrides:
- virtual bool Item(Ty2 * a_Item) override
- {
- bool res = false;
- if (!m_LuaState.Call(m_FnRef, a_Item, cLuaState::Return, res))
+ bool ret = false;
+ if (!L.Call(FnRef, &a_Item, cLuaState::Return, ret))
{
LOGWARNING("Failed to call Lua callback");
- m_LuaState.LogStackTrace();
+ L.LogStackTrace();
return true; // Abort enumeration
}
- return res;
+ return ret;
}
- } Callback(L, FnRef);
-
- bool res = (Self->*ForEachFn)(*Box, Callback);
+ );
// Push the result as the return value:
L.Push(res);
@@ -531,7 +430,7 @@ public:
template <
class Ty1,
class Ty2,
- bool (Ty1::*ForEachFn)(cItemCallback<Ty2> &)
+ bool (Ty1::*ForEachFn)(const std::function<bool(Ty2 &)> &)
>
static int ForEach(lua_State * tolua_S)
{
@@ -558,29 +457,14 @@ public:
return lua_do_error(tolua_S, "Error in function call '#funcname#': Expected a valid callback function for parameter #1");
}
- class cLuaCallback : public cItemCallback<Ty2>
- {
- public:
- cLuaCallback(cLuaState & a_LuaState, cLuaState::cRef & a_FnRef):
- m_LuaState(a_LuaState),
- m_FnRef(a_FnRef)
- {
- }
-
- private:
- cLuaState & m_LuaState;
- cLuaState::cRef & m_FnRef;
-
- virtual bool Item(Ty2 * a_Item) override
+ // Call the enumeration:
+ bool res = (Self->*ForEachFn)([&](Ty2 & a_Item)
{
- bool res = false; // By default continue the enumeration
- m_LuaState.Call(m_FnRef, a_Item, cLuaState::Return, res);
- return res;
+ bool ret = false; // By default continue the enumeration
+ L.Call(FnRef, &a_Item, cLuaState::Return, ret);
+ return ret;
}
- } Callback(L, FnRef);
-
- // Call the enumeration:
- bool res = (Self->*ForEachFn)(Callback);
+ );
// Push the return value:
L.Push(res);
@@ -595,7 +479,7 @@ public:
template <
class Ty1,
class Ty2,
- bool (Ty1::*ForEachFn)(cItemCallback<Ty2> &)
+ bool (Ty1::*ForEachFn)(const std::function<bool(Ty2 &)> &)
>
static int StaticForEach(lua_State * tolua_S)
{
@@ -616,29 +500,14 @@ public:
return lua_do_error(tolua_S, "Error in function call '#funcname#': Expected a valid callback function for parameter #1");
}
- class cLuaCallback : public cItemCallback<Ty2>
- {
- public:
- cLuaCallback(cLuaState & a_LuaState, cLuaState::cRef & a_FnRef):
- m_LuaState(a_LuaState),
- m_FnRef(a_FnRef)
- {
- }
-
- private:
- cLuaState & m_LuaState;
- cLuaState::cRef & m_FnRef;
-
- virtual bool Item(Ty2 * a_Item) override
+ // Call the enumeration:
+ bool res = (Ty1::Get()->*ForEachFn)([&](Ty2 & a_Item)
{
- bool res = false; // By default continue the enumeration
- m_LuaState.Call(m_FnRef, a_Item, cLuaState::Return, res);
- return res;
+ bool ret = false; // By default continue the enumeration
+ L.Call(FnRef, &a_Item, cLuaState::Return, ret);
+ return ret;
}
- } Callback(L, FnRef);
-
- // Call the enumeration:
- bool res = (Ty1::Get()->*ForEachFn)(Callback);
+ );
// Push the return value:
L.Push(res);