internal void ReleaseCache() { while (_cacheTail != null) { var node = _cacheTail; _cacheTail = node.Previous; node.Next = null; node.Previous = _tail; _tail = node; } }
internal Node Get() { if (_tail != null) { var node = _tail; _tail = _tail.Previous; node.Previous = null; return node; } else { return (Node)Activator.CreateInstance(_nodeType); } }
public void Add(Node node) { if (Head == null) { Head = Tail = node; node.Next = node.Previous = null; } else { Tail.Next = node; node.Previous = Tail; node.Next = null; Tail = node; } if (NodeAdded != null) { NodeAdded(node); } }
/** * Swaps the positions of two nodes in the list. Useful when sorting a list. */ public void Swap(Node node1, Node node2) { if (node1.Previous == node2) { node1.Previous = node2.Previous; node2.Previous = node1; node2.Next = node1.Next; node1.Next = node2; } else if (node2.Previous == node1) { node2.Previous = node1.Previous; node1.Previous = node2; node1.Next = node2.Next; node2.Next = node1; } else { var temp = node1.Previous; node1.Previous = node2.Previous; node2.Previous = temp; temp = node1.Next; node1.Next = node2.Next; node2.Next = temp; } if(Head == node1) { Head = node2; } else if(Head == node2) { Head = node1; } if (Tail == node1) { Tail = node2; } else if (Tail == node2) { Tail = node1; } if (node1.Previous != null) { node1.Previous.Next = node1; } if(node2.Previous != null) { node2.Previous.Next = node2; } if (node1.Next != null) { node1.Next.Previous = node1; } if (node2.Next != null) { node2.Next.Previous = node2; } }
internal void RemoveAll() { while(Head != null) { var node = Head; Head = node.Next; node.Previous = null; node.Next = null; if (NodeRemoved != null) { NodeRemoved(node); } } Tail = null; }
internal void Remove(Node node) { if (Head == node) { Head = Head.Next; } if (Tail == node) { Tail = Tail.Previous; } if (node.Previous != null) { node.Previous.Next = node.Next; } if (node.Next != null) { node.Next.Previous = node.Previous; } if (NodeRemoved != null) { NodeRemoved(node); } // N.B. Don't set node.next and node.previous to null because that will break the list iteration if node is the current node in the iteration. }
internal void Dispose(Node node) { node.Next = null; node.Previous = _tail; _tail = node; }
internal void Cache(Node node) { node.Previous = _cacheTail; _cacheTail = node; }
void OnNodeAdded(Node node) { var deathroesNode = (DeathThroesNode)node; if (deathroesNode.Death.deathSound != null) deathroesNode.Audio.Play(deathroesNode.Death.deathSound); }
public void CreateEntity() { _nodes = new NodeList(); _tempNode = new Node(); }
public void ClearEntity() { _nodes = null; _tempNode = null; }