/// <summary> /// Enqueue an item into the specified priority queue /// </summary> public bool Enqueue(uint pqueue, EntityUpdate value) { LookupItem lookup; IHandle lookupH; UInt64 entry; uint localid = value.Entity.LocalId; if (m_lookupTable.TryGetValue(localid, out lookup)) { lookupH = lookup.Handle; entry = lookup.Heap[lookupH].EntryOrder; value.Update(lookup.Heap[lookupH].Value); lookup.Heap.Remove(lookupH); } else { entry = m_nextRequest++; ++m_added; } pqueue = Util.Clamp <uint>(pqueue, 0, NumberOfQueues - 1); lookup.Heap = m_heaps[pqueue]; lookup.Heap.Add(new MinHeapItem(pqueue, entry, value), ref lookup.Handle); m_lookupTable[localid] = lookup; return(true); }