public void TestClear3() { PriorityLinkedList <JobTimeoutModel> pq = this.CreateSimpleQueue(); pq.Remove(this.j1); pq.Remove(this.j2); pq.Remove(this.j3); Assert.Equal(0, pq.Count); Assert.False(pq.Contains(this.j1)); Assert.False(pq.Contains(this.j2)); Assert.False(pq.Contains(this.j3)); }
public bool DispatchEvent <T>(T evt) where T : BaseEvent { Type type = evt.GetType(); if (!m_handlerTable.ContainsKey(type)) { return(false); } PriorityLinkedList <Delegate> priorityLinkedList = m_handlerTable[type]; LinkedListNode <ElementPriorityPair <Delegate> > linkedListNode = priorityLinkedList.First(); while (linkedListNode != null) { LinkedListNode <ElementPriorityPair <Delegate> > next = linkedListNode.Next; Delegate element = linkedListNode.Value.Element; if (element.Target.Equals(null)) { priorityLinkedList.Remove(linkedListNode.Value.Element); linkedListNode = next; continue; } if ((bool)element.DynamicInvoke(evt)) { return(true); } linkedListNode = linkedListNode.Next; } return(false); }
public void TestCount2() { PriorityLinkedList <JobTimeoutModel> pq = this.CreateSimpleQueue(); Assert.Equal(3, pq.Count); pq.Remove(this.j1); Assert.Equal(2, pq.Count); pq.Remove(this.j2); Assert.Equal(1, pq.Count); pq.Remove(this.j3); Assert.Equal(0, pq.Count); pq.Remove(this.j1); Assert.Equal(0, pq.Count); pq.Enqueue(this.j1); Assert.Equal(1, pq.Count); }
public bool RemoveListener <T>(EventHandlerDelegate <T> handler) where T : BaseEvent { Type typeFromHandle = typeof(T); if (!m_handlerTable.ContainsKey(typeFromHandle)) { return(false); } PriorityLinkedList <Delegate> priorityLinkedList = m_handlerTable[typeFromHandle]; return(priorityLinkedList.Remove(handler)); }
public void TestRemove3() { PriorityLinkedList <JobTimeoutModel> pq = this.CreateSimpleQueue(); pq.Remove(this.j3); JobTimeoutModel d1 = pq.Dequeue(); JobTimeoutModel d2 = pq.Dequeue(); Assert.Equal(d1, this.j1); Assert.Equal(d2, this.j2); // queue should be empty now Assert.Null(pq.Dequeue()); }
public bool DispatchEvent <T>(T evt) where T : struct { Type typeFromHandle = typeof(T); if (!m_handlerTable.ContainsKey(typeFromHandle)) { return(false); } PriorityLinkedList <EventHandlerDelegate <T> > handlerList = GetHandlerList <T>(); bool copyOnWrite = handlerList.CopyOnWrite; handlerList.CopyOnWrite = true; LinkedListNode <ElementPriorityPair <EventHandlerDelegate <T> > > linkedListNode = handlerList.First(); while (linkedListNode != null) { LinkedListNode <ElementPriorityPair <EventHandlerDelegate <T> > > next = linkedListNode.Next; EventHandlerDelegate <T> element = linkedListNode.Value.Element; if (element.Target != null && element.Target.Equals(null)) { handlerList.Remove(linkedListNode.Value.Element); linkedListNode = next; } else { try { if (handlerList.Contains(element) && element(evt)) { handlerList.CopyOnWrite = copyOnWrite; return(true); } } catch (Exception ex) { Log.LogErrorFormatted(this, "The event handler for event '{0}' threw an exception. Execution will continue but the game may be in a broken state.", typeof(T).FullName); Log.LogException(this, ex); } linkedListNode = next; } } handlerList.CopyOnWrite = copyOnWrite; return(false); }
/// <summary> /// Removes a job from the timeout system. /// </summary> /// <param name="j"></param> public static void Remove(JobTimeoutModel j) { lock (Queue) { Queue.Remove(j); } }