Ejemplo n.º 1
0
 //把某个节点移动到头部
 public void MoveToHead(TDDoubleLinkedListNode <T> pNode)
 {
     if (pNode == null)
     {
         return;
     }
     if (pNode == Head)
     {
         return;
     }
     if (pNode.prev == null && pNode.next == null)
     {
         return;
     }
     if (pNode == Tail)
     {
         Tail = pNode.prev;
     }
     if (pNode.prev != null)
     {
         pNode.prev.next = pNode.next;
     }
     if (pNode.next != null)
     {
         pNode.next.prev = pNode.prev;
     }
     pNode.prev = null;
     pNode.next = Head;
     Head.prev  = pNode;
     Head       = pNode;
     if (Tail == null)
     {
         Tail = Head;
     }
 }
Ejemplo n.º 2
0
 //移除某个节点
 public void RemoveNode(TDDoubleLinkedListNode <T> pNode)
 {
     if (pNode == null)
     {
         return;
     }
     if (pNode == Head)
     {
         Head = pNode.next;
     }
     if (pNode == Tail)
     {
         Tail = pNode.prev;
     }
     if (pNode.prev != null)
     {
         pNode.prev.next = pNode.next;
     }
     if (pNode.next != null)
     {
         pNode.next.prev = pNode.prev;
     }
     pNode.prev = pNode.next = null;
     pNode.t    = null;
     m_doubleLinkedListNodePool.Recycle(pNode);
     m_count--;
 }
Ejemplo n.º 3
0
        public TDDoubleLinkedListNode <T> AddToTail(T t)
        {
            TDDoubleLinkedListNode <T> node = m_doubleLinkedListNodePool.Spawn(true);

            node.prev = null;
            node.next = null;
            node.t    = t;
            return(AddToTail(node));
        }
Ejemplo n.º 4
0
        public bool Find(T t)
        {
            TDDoubleLinkedListNode <T> node = null;

            if (m_doubleLinkedNodeDict.TryGetValue(t, out node) && node != null)
            {
                return(true);
            }
            return(false);
        }
Ejemplo n.º 5
0
        public void Remove(T t)
        {
            TDDoubleLinkedListNode <T> node = null;

            if (m_doubleLinkedNodeDict.TryGetValue(t, out node) && node != null)
            {
                m_doubleLinkedList.RemoveNode(node);
                m_doubleLinkedNodeDict.Remove(t);
            }
        }
Ejemplo n.º 6
0
        //刷新某个节点,把该节点移动到头部
        public bool Refresh(T t)
        {
            TDDoubleLinkedListNode <T> node = null;

            if (m_doubleLinkedNodeDict.TryGetValue(t, out node) && node != null)
            {
                m_doubleLinkedList.MoveToHead(node);
                return(true);
            }
            return(false);
        }
Ejemplo n.º 7
0
        public void Insert(T t)
        {
            TDDoubleLinkedListNode <T> node = null;

            if (m_doubleLinkedNodeDict.TryGetValue(t, out node) && node != null)
            {
                m_doubleLinkedList.AddToHeader(node);
            }
            else
            {
                m_doubleLinkedList.AddToHeader(t);
                m_doubleLinkedNodeDict.Add(t, m_doubleLinkedList.Head);
            }
        }
Ejemplo n.º 8
0
 //添加一个节点到尾部
 public TDDoubleLinkedListNode <T> AddToTail(TDDoubleLinkedListNode <T> pNode)
 {
     if (pNode == null)
     {
         return(null);
     }
     pNode.next = null;
     if (Tail == null)
     {
         Head = Tail = pNode;
     }
     else
     {
         pNode.prev = Tail;
         Tail.next  = pNode;
         Tail       = pNode;
     }
     m_count++;
     return(pNode);
 }
Ejemplo n.º 9
0
 //添加一个节点到头部
 public TDDoubleLinkedListNode <T> AddToHeader(TDDoubleLinkedListNode <T> pNode)
 {
     if (pNode == null)
     {
         return(null);
     }
     pNode.prev = null;
     if (Head == null)
     {
         Head = Tail = pNode;
     }
     else
     {
         pNode.next = Head;
         Head.prev  = pNode.next;
         Head       = pNode;
     }
     m_count++;
     return(pNode);
 }