summaryrefslogtreecommitdiff
path: root/libs/lua/LuaBridge/detail/CFunctions.h
diff options
context:
space:
mode:
Diffstat (limited to 'libs/lua/LuaBridge/detail/CFunctions.h')
-rw-r--r--libs/lua/LuaBridge/detail/CFunctions.h33
1 files changed, 32 insertions, 1 deletions
diff --git a/libs/lua/LuaBridge/detail/CFunctions.h b/libs/lua/LuaBridge/detail/CFunctions.h
index 9f1712995a..fafad5d0a7 100644
--- a/libs/lua/LuaBridge/detail/CFunctions.h
+++ b/libs/lua/LuaBridge/detail/CFunctions.h
@@ -401,7 +401,6 @@ struct CFunc
}
};
-
template <class T>
struct PtrNullCheck
{
@@ -430,6 +429,38 @@ struct CFunc
}
};
+ template <class T>
+ struct PtrEqualCheck
+ {
+ static int f (lua_State* L)
+ {
+ boost::shared_ptr<T> t0 = luabridge::Stack<boost::shared_ptr<T> >::get (L, 1);
+ boost::shared_ptr<T> t1 = luabridge::Stack<boost::shared_ptr<T> >::get (L, 2);
+ Stack <bool>::push (L, t0 == t1);
+ return 1;
+ }
+ };
+
+ template <class T>
+ struct WPtrEqualCheck
+ {
+ static int f (lua_State* L)
+ {
+ bool rv = false;
+ boost::weak_ptr<T> tw0 = luabridge::Stack<boost::weak_ptr<T> >::get (L, 1);
+ boost::weak_ptr<T> tw1 = luabridge::Stack<boost::weak_ptr<T> >::get (L, 2);
+ boost::shared_ptr<T> const t0 = tw0.lock();
+ boost::shared_ptr<T> const t1 = tw1.lock();
+ if (t0 && t1) {
+ T* const tt0 = t0.get();
+ T* const tt1 = t1.get();
+ rv = (tt0 == tt1);
+ }
+ Stack <bool>::push (L, rv);
+ return 1;
+ }
+ };
+
template <class MemFnPtr, class T,
class ReturnType = typename FuncTraits <MemFnPtr>::ReturnType>
struct CallMemberWPtr