// Add to the front of the list public void PushFront(ContainerNode newNode) { // Empty list if (this.listSize == 0) { this.head = newNode; } // Non-empty list else { // Push new node to front newNode.prev = null; newNode.next = this.head; this.head.prev = newNode; this.head = newNode; } // Increment count this.listSize++; }
/// <summary> /// Iterate through a list and retrieve it's inqured enum value with instance ID /// </summary> /// <param name="query"></param> /// <param name="id"></param> /// <param name="list"></param> /// <returns></returns> protected ContainerNode BaseFind(Enum query, uint id, ContainerList list) { ContainerNode foundNode = null; ContainerNode itr = list.Head; while (itr != null) { if (itr.GetName().Equals(query)) { if (itr.Id == id) { // Found node foundNode = itr; break; } } // Next node itr = itr.next; } return(foundNode); }
// // Constructors // public ContainerNode() { this.prev = null; this.next = null; this.instanceId = 0u; }
// Move the given node from one list to another private void Move(ContainerNode node, ContainerList fromList, ContainerList toList) { Debug.Assert(ReferenceEquals(fromList, toList) == false); node = fromList.Pop(node); toList.PushFront(node); }
// Remove from the list public ContainerNode Pop(ContainerNode oldNode) { // No nodes at all if (this.listSize == 0) { return(null); } // Search for the node to remove ContainerNode nodeToRemove = null; for (ContainerNode n = this.head; n != null; n = n.next) { if (ReferenceEquals(n, oldNode)) { nodeToRemove = n; break; } } // Queried node not found if (nodeToRemove == null) { return(null); } // Queried node is only one found if (this.listSize == 1) { this.head = null; this.listSize--; return(nodeToRemove); } // Queried node is in front else if (nodeToRemove.prev == null) { nodeToRemove = this.head; this.head = head.next; this.head.prev = null; nodeToRemove.next = null; this.listSize--; return(nodeToRemove); } // Queried node is in back else if (nodeToRemove.next == null) { ContainerNode tail = nodeToRemove.prev; tail.next = null; nodeToRemove.prev = null; this.listSize--; return(nodeToRemove); } // Queried node is in the middle nodeToRemove.prev.next = nodeToRemove.next; nodeToRemove.next.prev = nodeToRemove.prev; nodeToRemove.prev = null; nodeToRemove.next = null; this.listSize--; return(nodeToRemove); }