public void SetReservedHandleObj(int handle, KAutoObject obj) { int index = (handle >> 0) & 0x7fff; int handleId = (handle >> 15); lock (_table) { KHandleEntry entry = _table[index]; entry.Obj = obj; entry.HandleId = (ushort)(handle >> 15); obj.IncrementReferenceCount(); } }
public KernelResult GenerateHandle(KAutoObject obj, out int handle) { handle = 0; lock (_table) { if (_activeSlotsCount >= _size) { return(KernelResult.HandleTableFull); } KHandleEntry entry = _nextFreeEntry; _nextFreeEntry = entry.Next; entry.Obj = obj; entry.HandleId = _idCounter; _activeSlotsCount++; handle = (_idCounter << 15) | entry.Index; obj.IncrementReferenceCount(); if ((short)(_idCounter + 1) >= 0) { _idCounter++; } else { _idCounter = 1; } } return(KernelResult.Success); }