Exemple #1
0
        // 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);
        }
Exemple #3
0
        //
        // 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);
 }
Exemple #5
0
        // 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);
        }