diff options
author | Robin Gareus <robin@gareus.org> | 2016-08-26 18:25:15 +0200 |
---|---|---|
committer | Robin Gareus <robin@gareus.org> | 2016-08-26 18:25:15 +0200 |
commit | 1d7c144967b9cd24f4fd53270c340a8accc61cab (patch) | |
tree | 53c794a2d20ee7b2dd7ea40ccd50f092ce91ce33 /libs/lua/LuaBridge/detail/CFunctions.h | |
parent | ddc4e61b57803ae99b472e97f2000a9e04b55aff (diff) |
add "sameinstance()" lua binding for all shared/weak ptrs
Diffstat (limited to 'libs/lua/LuaBridge/detail/CFunctions.h')
-rw-r--r-- | libs/lua/LuaBridge/detail/CFunctions.h | 33 |
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 |