Exemplo n.º 1
0
        public SyncVar GetSyncVarFromUIntPtr(UIntPtr o)
        {
            SyncVar ret;

            if (!uintptr_to_syncvar.TryGetValue(o.ToUInt64(), out ret))
            {
                ret = (SyncVar)MChessChess.GetNextSyncVar();
                Conversions.NewVar(ret);
                uintptr_to_syncvar.Add(o.ToUInt64(), ret);
            }
            return(ret);
        }
Exemplo n.º 2
0
        public SyncVar GetSyncVarFromGCAddress(GCAddress gca)
        {
            SyncVar ret;

            if (!gca_to_syncvar.TryGetValue(gca, out ret))
            {
                // NOTE: we are ignoring the (highly weird) case where the object might be a Thread
                ret = (SyncVar)MChessChess.GetNextSyncVar();
                Conversions.NewVar(ret);
                gca.AddRef();   // VERY IMPORTANT: must ref count to keep unmanaged cell alive
                gca_to_syncvar.Add(gca, ret);
            }
            return(ret);
        }
Exemplo n.º 3
0
 public SyncVar GetSyncVarFromNativeHandle(System.IntPtr handle)
 {
     lock (this)
     {
         SyncVar ret;
         if (handleToSyncVar.TryGetValue(handle, out ret))
         {
             return(ret);
         }
         ret = (SyncVar)MChessChess.GetNextSyncVar();
         Conversions.NewVar(ret);
         handleToSyncVar[handle] = ret;
         return(ret);
     }
 }
Exemplo n.º 4
0
        public SyncVar GetSyncVarFromObject(object o)
        {
            SyncVar       ret;
            WeakReference w = new WeakReference(o);

            if (o.GetType() == typeof(System.Threading.Thread))
            {
                // in this case, the SyncVar value is the ChessTask id
                ret = tid_to_ctid[(o as System.Threading.Thread).ManagedThreadId];
                return(ret);
            }
            else if (!obj_to_syncvar.TryGetValue(w, out ret))
            {
                ret = (SyncVar)MChessChess.GetNextSyncVar();
                Conversions.NewVar(ret);
                obj_to_syncvar.Add(w, ret);
            }
            return(ret);
        }