Exemple #1
0
 public void PushBefore(ViRefNode2 <T> after, ViRefNode2 <T> node)
 {
     node.Detach();
     ++_cnt;
     node._list = this;
     _PushBefore(after, node);
 }
Exemple #2
0
    public void PushBefore(ViRefNode2 <T> after, ViRefList2 <T> list)
    {
        if (list.Size == 0)
        {
            return;
        }
        if (after.IsAttach(list))
        {
            return;
        }
        if (after.IsAttach() == false)
        {
            return;
        }
        ViDebuger.AssertError(after._list);
        ViRefList2 <T> receiveList = after._list;
        ViRefNode2 <T> iter        = list._root._next;

        while (iter != list._root)
        {
            iter._list = receiveList;
            iter       = iter._next;
        }
        ViDebuger.AssertError(receiveList != list);
        ViRefNode2 <T> first = list._root._next;
        ViRefNode2 <T> back  = list._root._pre;
        ViRefNode2 <T> pre   = after._pre;

        _Link(pre, first);
        _Link(back, after);
        receiveList._cnt += list.Size;
        list._Init();
    }
Exemple #3
0
 public void PushAfter(ViRefNode2 <T> before, ViRefNode2 <T> node)
 {
     node.Detach();
     ++_cnt;
     node._list = this;
     _PushAfter(before, node);
 }
Exemple #4
0
 public void PushFront(ViRefNode2 <T> node)
 {
     node.Detach();
     ++_cnt;
     node._list = this;
     _PushAfter(_root, node);
 }
Exemple #5
0
 public void PushBack(ViRefNode2 <T> node)
 {
     node.Detach();
     ++_cnt;
     node._list = this;
     _PushBefore(_root, node);
 }
Exemple #6
0
    static void _PushBefore(ViRefNode2 <T> after, ViRefNode2 <T> node)
    {
        ViRefNode2 <T> pre = after._pre;

        ViDebuger.AssertError(pre);
        _Link(pre, node);
        _Link(node, after);
    }
Exemple #7
0
    //+--------------------------------------------------------------------------------------------------------------
    static void _PushAfter(ViRefNode2 <T> before, ViRefNode2 <T> node)
    {
        ViRefNode2 <T> next = before._next;

        ViDebuger.AssertError(next);
        _Link(before, node);
        _Link(node, next);
    }
Exemple #8
0
    public void SetValue(T value)
    {
        ViRefNode2 <T> next = _root._next;

        while (next != _root)
        {
            next.Data = value;
            next      = next._next;
        }
    }
Exemple #9
0
 internal void _Detach(ViRefNode2 <T> node)
 {
     ViDebuger.AssertError(node._list == this);
     if (node == _next)        //! 如果是正在迭代的点, 则自动将Next移到下个点
     {
         Next(ref _next);
     }
     _Link(node._pre, node._next);
     node._pre  = null;
     node._next = null;
     --_cnt;
 }
Exemple #10
0
 public static void UpdateList()
 {
     _list.BeginIterator();
     while (!_list.IsEnd())
     {
         ViRefNode2 <ViDistInNotifier> iter = _list.CurrentNode;
         _list.Next();
         ViDistInNotifier notifier = iter.Data;
         ViDebuger.AssertError(notifier);
         notifier._Update();
     }
 }
Exemple #11
0
 public static void ClearAll()
 {
     _list.BeginIterator();
     while (!_list.IsEnd())
     {
         ViRefNode2 <ViAsynLoader> node = _list.CurrentNode;
         ViAsynLoader loader            = node.Data;
         ViDebuger.AssertError <ViAsynLoader>(loader, "ViAsynLoader.ClearAll() loader is null");
         _list.Next();
         loader.Detach();
     }
     _list.Clear();
 }
Exemple #12
0
    public void Clear()
    {
        ViRefNode2 <T> next = _root._next;

        while (next != _root)
        {
            ViRefNode2 <T> nextCopy = next._next;
            next._pre  = null;
            next._next = null;
            next._list = null;
            next       = nextCopy;
        }
        _Init();
    }
Exemple #13
0
    public void ClearAndClearContent()
    {
        ViRefNode2 <T> next = _root._next;

        while (next != _root)
        {
            ViRefNode2 <T> nextCopy = next._next;
            next._pre  = null;
            next._next = null;
            next._list = null;
            next.Data  = default(T);
            next       = nextCopy;
        }
        _Init();
    }
Exemple #14
0
#pragma warning disable 0219
    public static void Test()
    {
        ViRefList2 <int> list  = new ViRefList2 <int>();
        ViRefNode2 <int> node0 = new ViRefNode2 <int>(); node0.Data = 0;
        ViRefNode2 <int> node1 = new ViRefNode2 <int>(); node1.Data = 1;
        ViRefNode2 <int> node2 = new ViRefNode2 <int>(); node2.Data = 2;

        list.PushBack(node0);
        list.PushBack(node1);
        list.PushBack(node2);

        list.BeginIterator();
        while (!list.IsEnd())
        {
            ViRefNode2 <int> node = list.CurrentNode;
            list.Next();
            ///<使用>
            ///</使用>
        }
        list.Clear();
    }
Exemple #15
0
 //+-------------------------------------------------------------------------------------------------------------------------------------------------------------
 public static void UpdateAll()
 {
     _list.BeginIterator();
     while (!_list.IsEnd())
     {
         ViRefNode2 <ViAsynLoader> node = _list.CurrentNode;
         ViAsynLoader loader            = node.Data;
         ViDebuger.AssertError <ViAsynLoader>(loader, "ViAsynLoader.UpdateAll() loader is null");
         _list.Next();
         loader.TryLoad();
         if (loader.IsLoaded)
         {
             OnCompleted dele = loader.DeleOnCompleted;
             loader.Detach();
             loader.OnLoaded();
             if (dele != null)
             {
                 dele(loader);
             }
         }
     }
 }
Exemple #16
0
 public static void UpdateList()
 {
     _listInner.BeginIterator();
     while (!_listInner.IsEnd())
     {
         ViRefNode2 <ViDistNotifier> iter = _listInner.CurrentNode;
         _listInner.Next();
         ViDistNotifier notifier = iter.Data;
         ViDebuger.AssertError(notifier);
         notifier._UpdateInside();
     }
     _listOutor.BeginIterator();
     while (!_listOutor.IsEnd())
     {
         ViRefNode2 <ViDistNotifier> iter = _listOutor.CurrentNode;
         _listOutor.Next();
         ViDistNotifier _this = iter.Data;
         ViDebuger.AssertError(_this);
         _this._UpdateOutside();
     }
     _listInner.PushBack(_listWaitingInner);
     _listOutor.PushBack(_listWaitingOutor);
 }
Exemple #17
0
 public bool IsEnd(ViRefNode2 <T> node)
 {
     return(node == _root);
 }
Exemple #18
0
 static void _Link(ViRefNode2 <T> pre, ViRefNode2 <T> next)
 {
     pre._next = next;
     next._pre = pre;
 }
Exemple #19
0
 public static void Next(ref ViRefNode2 <T> node)
 {
     ViDebuger.AssertError(node != null && node._next != null);
     node = node._next;
 }