Пример #1
0
 internal void ReturnLuaRef(LuaRef lr)
 {
     lr.l  = IntPtr.Zero;
     lr.r  = 0;
     lr.lr = 0;
     _RefCache.Add(lr);
 }
Пример #2
0
 internal void DoImmediateRecycle(LuaRef lr)
 {
     GC.SuppressFinalize(lr);
     if (IsClosed)
     {
         return;
     }
     lr.RawDispose();
     ReturnLuaRef(lr);
 }
Пример #3
0
 internal void RegPendingRecycle(LuaRef lr)
 {
     //GC.SuppressFinalize(lr); // this should be called in finalizer.
     if (IsClosed)
     {
         return;
     }
     lock (_PendingRecycle)
     {
         _PendingRecycle.Add(lr);
     }
 }
Пример #4
0
 public LuaRef GetLuaRef()
 {
     DoPendingRecycle();
     if (_RefCache.Count <= 0)
     {
         var rv = new LuaRef();
         rv.man = this;
         return(rv);
     }
     else
     {
         var index = _RefCache.Count - 1;
         var rv    = _RefCache[index];
         _RefCache.RemoveAt(index);
         GC.ReRegisterForFinalize(rv);
         return(rv);
     }
 }
Пример #5
0
 protected internal LuaRawTable(LuaRef lref)
 {
     Ref = lref;
     _L  = lref.L;
 }
 protected internal LuaTable(LuaRef lref)
 {
     Ref = lref;
     _L  = lref.RawRef.l;
 }