Ejemplo n.º 1
0
    public void RemoveNode(SVDoubleLinkedListNode <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;
        }

        m_Count--;
        pNode.Reset();
        m_DoubleLinkNodePool.Recycle(pNode);
    }
Ejemplo n.º 2
0
    public SVDoubleLinkedListNode <T> AddToTail(T t)
    {
        SVDoubleLinkedListNode <T> pList = m_DoubleLinkNodePool.Spawn(true);

        pList.next = null;
        pList.prev = null;
        pList.t    = t;
        return(AddToTail(pList));
    }
Ejemplo n.º 3
0
    public SVDoubleLinkedListNode <T> AddToHeader(T t)
    {
        SVDoubleLinkedListNode <T> node = m_DoubleLinkNodePool.Spawn(true);

        node.prev = null;
        node.next = null;
        node.t    = t;
        return(AddToHeader(node));
    }
Ejemplo n.º 4
0
    /// <summary>
    /// 查找是否存在该节点
    /// </summary>
    /// <param name="t"></param>
    /// <returns></returns>
    public bool Find(T t)
    {
        SVDoubleLinkedListNode <T> node = null;

        if (!m_FindMap.TryGetValue(t, out node) || node == null)
        {
            return(false);
        }

        return(true);
    }
Ejemplo n.º 5
0
    public void Remove(T t)
    {
        SVDoubleLinkedListNode <T> node = null;

        if (!m_FindMap.TryGetValue(t, out node) || node == null)
        {
            return;
        }
        m_DLink.RemoveNode(node);
        m_FindMap.Remove(t);
    }
Ejemplo n.º 6
0
    /// <summary>
    /// 刷新某个节点,把节点移动到头部
    /// </summary>
    /// <param name="t"></param>
    /// <returns></returns>
    public bool Reflesh(T t)
    {
        SVDoubleLinkedListNode <T> node = null;

        if (!m_FindMap.TryGetValue(t, out node) || node == null)
        {
            return(false);
        }

        m_DLink.MoveToHead(node);
        return(true);
    }
Ejemplo n.º 7
0
    public void MoveToHead(SVDoubleLinkedListNode <T> pNode)
    {
        if (pNode == null || pNode == Head)
        {
            return;
        }
        if (pNode.prev == null && pNode.next == null)
        {
            return;
        }
        var t = pNode.t;

        RemoveNode(pNode);
        AddToHeader(t);
    }
Ejemplo n.º 8
0
    public SVDoubleLinkedListNode <T> AddToTail(SVDoubleLinkedListNode <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(Tail);
    }
Ejemplo n.º 9
0
 public SVDoubleLinkedListNode <T> AddToHeader(SVDoubleLinkedListNode <T> node)
 {
     if (node == null)
     {
         return(null);
     }
     //如果m_count == 0,则表头表尾都是它
     //如果m_count > 0, 则表头是它
     if (m_Count == 0)
     {
         Head = node;
         Tail = node;
     }
     else
     {
         node.next = Head;
         Head.prev = node;
         Head      = node;
     }
     m_Count++;
     return(Head);
 }
Ejemplo n.º 10
0
 public void  Reset()
 {
     prev = next = null;
     t    = null;
 }