Example #1
0
#pragma warning disable 0219
    public static void Test0()
    {
        Console.WriteLine("Performance_ViDoubleLink3.Test0");
        ViDoubleLink3 <UInt32> list = new ViDoubleLink3 <UInt32>();
        UInt32 cnt   = 10000000;
        UInt32 round = 100;

        Console.WriteLine(DateTime.Now);
        for (UInt32 idx = 0; idx < cnt; ++idx)
        {
            list.PushBack(idx);
        }
        Console.WriteLine(DateTime.Now);
        for (UInt32 idx = 0; idx < round; ++idx)
        {
            ViDoubleLinkNode3 <UInt32> iter = list.GetHead();
            while (!list.IsEnd(iter))
            {
                UInt32 value = iter.Data;
                ViDoubleLink3 <UInt32> .Next(ref iter);

                ///<使用>
                ///</使用>
            }
        }
        Console.WriteLine(DateTime.Now);
    }
Example #2
0
    public void PushBack(T value)
    {
        ViDoubleLinkNode3 <T> node = new ViDoubleLinkNode3 <T>(value);

        ++_count;
        _PushBefore(_root, node);
    }
Example #3
0
    public void PushFront(T value)
    {
        ViDoubleLinkNode3 <T> node = new ViDoubleLinkNode3 <T>(value);

        ++_count;
        _PushAfter(_root, node);
    }
Example #4
0
    static void _PushBefore(ViDoubleLinkNode3 <T> after, ViDoubleLinkNode3 <T> node)
    {
        ViDoubleLinkNode3 <T> pre = after._pre;

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

        ViDebuger.AssertError(next);
        _Link(before, node);
        _Link(node, next);
    }
Example #6
0
    //public void PushBack(ViDoubleLink3<T> list)
    //{
    //    _PushBefore(_root, list);
    //}
    //public void PushFront(ViDoubleLink3<T> list)
    //{
    //    _PushAfter(_root, list);
    //}
    public void SetValue(T value)
    {
        ViDoubleLinkNode3 <T> next = _root._next;

        while (next != _root)
        {
            next.Data = value;
            next      = next._next;
        }
    }
Example #7
0
 public bool MoveNext()
 {
     if (_node != _root)
     {
         _current = _node.Data;
         _node    = _node._next;
         return(true);
     }
     return(false);
 }
Example #8
0
    public void Clear()
    {
        ViDoubleLinkNode3 <T> next = _root._next;

        while (next != _root)
        {
            ViDoubleLinkNode3 <T> nextCopy = next._next;
            next._pre  = null;
            next._next = null;
            next       = nextCopy;
        }
        _Init();
    }
Example #9
0
    static void _PushBefore(ViDoubleLinkNode3 <T> after, ViDoubleLink3 <T> list)
    {
        if (list.IsEmpty())
        {
            return;
        }
        ViDoubleLinkNode3 <T> first = list._root._next;
        ViDoubleLinkNode3 <T> back  = list._root._pre;
        ViDoubleLinkNode3 <T> pre   = after._pre;

        _Link(pre, first);
        _Link(back, after);
        list._Init();
    }
Example #10
0
    static void _PushAfter(ViDoubleLinkNode3 <T> before, ViDoubleLink3 <T> list)
    {
        if (list.IsEmpty())
        {
            return;
        }
        ViDoubleLinkNode3 <T> first = list._root._next;
        ViDoubleLinkNode3 <T> back  = list._root._pre;
        ViDoubleLinkNode3 <T> next  = before._next;

        _Link(before, first);
        _Link(back, next);
        list._Init();
    }
Example #11
0
    private bool _IsChild(ViDoubleLinkNode3 <T> node)
    {
        ViDoubleLinkNode3 <T> next = _root._next;

        while (next != _root)
        {
            if (node == next)
            {
                return(true);
            }
            next = next._next;
        }
        return(false);
    }
Example #12
0
    public bool Has(T value)
    {
        EqualityComparer <T>  comparer = EqualityComparer <T> .Default;
        ViDoubleLinkNode3 <T> next     = _root._next;

        while (next != _root)
        {
            if (comparer.Equals(next.Data, value))
            {
                return(true);
            }
            next = next._next;
        }
        return(false);
    }
Example #13
0
    void _Check(ViVector3 center)
    {
        ViDebuger.AssertError(_deleIsInRange);
        ViDoubleLinkNode3 <ViRefPtr <TEntity> > iter = _objs.GetHead();

        while (!_objs.IsEnd(iter))
        {
            TEntity obj = iter.Data.Obj;
            ViDoubleLink3 <ViRefPtr <TEntity> > .Next(ref iter);

            if (!_deleIsInRange(obj, center))
            {
                _objs.Remove(iter);
            }
        }
    }
Example #14
0
#pragma warning disable 0219
    public static void Test()
    {
        ViDoubleLink3 <int> list = new ViDoubleLink3 <int>();

        list.PushBack(1);
        list.PushBack(3);

        {        ///<正向迭代>
            ViDoubleLinkNode3 <int> iter = list.GetHead();
            while (!list.IsEnd(iter))
            {
                int value = iter.Data;
                ViDoubleLink3 <int> .Next(ref iter);

                ///<使用>
                Console.WriteLine(value);
                ///</使用>
            }
        }
        {        ///<反向迭代>
            ViDoubleLinkNode3 <int> iter = list.GetTail();
            while (!list.IsEnd(iter))
            {
                int value = iter.Data;
                ViDoubleLink3 <int> .Pre(ref iter);

                ///<使用>
                Console.WriteLine(value);
                ///</使用>
            }
        }

        foreach (int value in list)
        {
            Console.WriteLine(value);
        }
    }
Example #15
0
    void _EraseFarst(ViVector3 center)
    {
        if (_objs.Count == 0)
        {
            return;
        }
        float fMaxDist = 0.0f;
        ViDoubleLinkNode3 <ViRefPtr <TEntity> > iter    = _objs.GetHead();
        ViDoubleLinkNode3 <ViRefPtr <TEntity> > iterFar = iter;

        while (!_objs.IsEnd(iter))
        {
            TEntity obj = iter.Data.Obj;
            ViDoubleLink3 <ViRefPtr <TEntity> > .Next(ref iter);

            float fDist = obj.GetDistance(center);
            if (fMaxDist <= fDist)
            {
                fMaxDist = fDist;
                iterFar  = iter;
            }
        }
        _objs.Remove(iterFar);
    }
Example #16
0
 public void Remove(ViDoubleLinkNode3 <T> node)
 {
     _IsChild(node);
     node._Detach();
     --_count;
 }
Example #17
0
 public bool IsEnd(ViDoubleLinkNode3 <T> node)
 {
     return(node == _root);
 }
Example #18
0
    public static void PushAfter(ViDoubleLinkNode3 <T> before, T value)
    {
        ViDoubleLinkNode3 <T> node = new ViDoubleLinkNode3 <T>(value);

        _PushAfter(before, node);
    }
Example #19
0
    public static void PushBefore(ViDoubleLinkNode3 <T> after, T value)
    {
        ViDoubleLinkNode3 <T> node = new ViDoubleLinkNode3 <T>(value);

        _PushBefore(after, node);
    }
Example #20
0
 public static void Pre(ref ViDoubleLinkNode3 <T> node)
 {
     //ViDebuger.AssertError(node != null && node._pre != null);
     node = node._pre;
 }
Example #21
0
 static void _Link(ViDoubleLinkNode3 <T> pre, ViDoubleLinkNode3 <T> next)
 {
     pre._next = next;
     next._pre = pre;
 }
Example #22
0
 //+-----------------------------------------------------------------------------------------------------------------------------
 public static void Next(ref ViDoubleLinkNode3 <T> node)
 {
     //ViDebuger.AssertError(node != null && node._next != null);
     node = node._next;
 }
Example #23
0
 internal Enumerator(ViDoubleLink3 <T> list)
 {
     _root    = list._root;
     _node    = list._root._next;
     _current = default(T);
 }
Example #24
0
 public void Reset()
 {
     _node = _root._next;
 }