internal void ReturnLuaRef(LuaRef lr) { lr.l = IntPtr.Zero; lr.r = 0; lr.lr = 0; _RefCache.Add(lr); }
internal void DoImmediateRecycle(LuaRef lr) { GC.SuppressFinalize(lr); if (IsClosed) { return; } lr.RawDispose(); ReturnLuaRef(lr); }
internal void RegPendingRecycle(LuaRef lr) { //GC.SuppressFinalize(lr); // this should be called in finalizer. if (IsClosed) { return; } lock (_PendingRecycle) { _PendingRecycle.Add(lr); } }
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); } }
protected internal LuaRawTable(LuaRef lref) { Ref = lref; _L = lref.L; }
protected internal LuaTable(LuaRef lref) { Ref = lref; _L = lref.RawRef.l; }