예제 #1
0
 public static void PushAfter(DoubleLinkNode2 <T> before, DoubleLink2 <T> list)
 {
     if (before.IsAttach() && !list.IsEmpty())
     {
         DoubleLink2 <T> ._PushAfter(before, list);
     }
 }
예제 #2
0
 public void SetValue(T value)
 {
     for (DoubleLinkNode2 <T> node = this._root._next; node != this._root; node = node._next)
     {
         node.Data = value;
     }
 }
예제 #3
0
 public static void PushBefore(DoubleLinkNode2 <T> after, DoubleLink2 <T> list)
 {
     if (after.IsAttach() && !list.IsEmpty())
     {
         DoubleLink2 <T> ._PushBefore(after, list);
     }
 }
예제 #4
0
        private static void _PushBefore(DoubleLinkNode2 <T> after, DoubleLinkNode2 <T> node)
        {
            DoubleLinkNode2 <T> ptr = after._pre;

            UnityEngine.Debug.Assert(ptr != null);
            DoubleLink2 <T> ._Link(ptr, node);

            DoubleLink2 <T> ._Link(node, after);
        }
예제 #5
0
        private static void _PushAfter(DoubleLinkNode2 <T> before, DoubleLinkNode2 <T> node)
        {
            DoubleLinkNode2 <T> ptr = before._next;

            UnityEngine.Debug.Assert(ptr != null);
            DoubleLink2 <T> ._Link(before, node);

            DoubleLink2 <T> ._Link(node, ptr);
        }
예제 #6
0
 public void Detach()
 {
     if (this._pre != null)
     {
         this._pre._next = this._next;
         this._next._pre = this._pre;
         this._pre       = null;
         this._next      = null;
     }
 }
예제 #7
0
        public void Clear()
        {
            DoubleLinkNode2 <T> node2;

            for (DoubleLinkNode2 <T> node = this._root._next; node != this._root; node = node2)
            {
                node2      = node._next;
                node._pre  = null;
                node._next = null;
            }
            this._Init();
        }
예제 #8
0
        private static void _PushBefore(DoubleLinkNode2 <T> after, DoubleLink2 <T> list)
        {
            if (!list.IsEmpty())
            {
                DoubleLinkNode2 <T> next = list._root._next;
                DoubleLinkNode2 <T> pre  = list._root._pre;
                DoubleLink2 <T> ._Link(after._pre, next);

                DoubleLink2 <T> ._Link(pre, after);

                list._Init();
            }
        }
예제 #9
0
        public void ClearAndClearContent()
        {
            DoubleLinkNode2 <T> node2;

            for (DoubleLinkNode2 <T> node = this._root._next; node != this._root; node = node2)
            {
                node2      = node._next;
                node._pre  = null;
                node._next = null;
                node.Data  = default(T);
            }
            this._Init();
        }
예제 #10
0
        private static void _PushAfter(DoubleLinkNode2 <T> before, DoubleLink2 <T> list)
        {
            if (!list.IsEmpty())
            {
                DoubleLinkNode2 <T> next  = list._root._next;
                DoubleLinkNode2 <T> pre   = list._root._pre;
                DoubleLinkNode2 <T> node3 = before._next;
                DoubleLink2 <T> ._Link(before, next);

                DoubleLink2 <T> ._Link(pre, node3);

                list._Init();
            }
        }
예제 #11
0
 private static void _Link(DoubleLinkNode2 <T> pre, DoubleLinkNode2 <T> next)
 {
     pre._next = next;
     next._pre = pre;
 }
예제 #12
0
 public DoubleLink2()
 {
     this._root = new DoubleLinkNode2 <T>();
     this._Init();
 }
예제 #13
0
 public bool IsEnd(DoubleLinkNode2 <T> node) => (node == this._root);
예제 #14
0
 public void PushFront(DoubleLinkNode2 <T> node)
 {
     node.Detach();
     DoubleLink2 <T> ._PushAfter(this._root, node);
 }
예제 #15
0
 public static void PushBefore(DoubleLinkNode2 <T> after, DoubleLinkNode2 <T> node)
 {
     node.Detach();
     DoubleLink2 <T> ._PushBefore(after, node);
 }
예제 #16
0
 public void PushBack(DoubleLinkNode2 <T> node)
 {
     node.Detach();
     DoubleLink2 <T> ._PushBefore(this._root, node);
 }
예제 #17
0
 public static void PushAfter(DoubleLinkNode2 <T> before, DoubleLinkNode2 <T> node)
 {
     node.Detach();
     DoubleLink2 <T> ._PushAfter(before, node);
 }
예제 #18
0
 public static void Next(ref DoubleLinkNode2 <T> node)
 {
     UnityEngine.Debug.Assert((node != null) && (node._next != null));
     node = node._next;
 }
예제 #19
0
 public static void Pre(ref DoubleLinkNode2 <T> node)
 {
     UnityEngine.Debug.Assert((node != null) && (node._pre != null));
     node = node._pre;
 }