Beispiel #1
0
        /// <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);
        }