#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); }
public void PushBack(T value) { ViDoubleLinkNode3 <T> node = new ViDoubleLinkNode3 <T>(value); ++_count; _PushBefore(_root, node); }
public void PushFront(T value) { ViDoubleLinkNode3 <T> node = new ViDoubleLinkNode3 <T>(value); ++_count; _PushAfter(_root, node); }
static void _PushBefore(ViDoubleLinkNode3 <T> after, ViDoubleLinkNode3 <T> node) { ViDoubleLinkNode3 <T> pre = after._pre; ViDebuger.AssertError(pre); _Link(pre, node); _Link(node, after); }
//+----------------------------------------------------------------------------------------------------------------------------- static void _PushAfter(ViDoubleLinkNode3 <T> before, ViDoubleLinkNode3 <T> node) { ViDoubleLinkNode3 <T> next = before._next; ViDebuger.AssertError(next); _Link(before, node); _Link(node, next); }
//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; } }
public bool MoveNext() { if (_node != _root) { _current = _node.Data; _node = _node._next; return(true); } return(false); }
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(); }
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(); }
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(); }
private bool _IsChild(ViDoubleLinkNode3 <T> node) { ViDoubleLinkNode3 <T> next = _root._next; while (next != _root) { if (node == next) { return(true); } next = next._next; } return(false); }
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); }
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); } } }
#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); } }
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); }
public void Remove(ViDoubleLinkNode3 <T> node) { _IsChild(node); node._Detach(); --_count; }
public bool IsEnd(ViDoubleLinkNode3 <T> node) { return(node == _root); }
public static void PushAfter(ViDoubleLinkNode3 <T> before, T value) { ViDoubleLinkNode3 <T> node = new ViDoubleLinkNode3 <T>(value); _PushAfter(before, node); }
public static void PushBefore(ViDoubleLinkNode3 <T> after, T value) { ViDoubleLinkNode3 <T> node = new ViDoubleLinkNode3 <T>(value); _PushBefore(after, node); }
public static void Pre(ref ViDoubleLinkNode3 <T> node) { //ViDebuger.AssertError(node != null && node._pre != null); node = node._pre; }
static void _Link(ViDoubleLinkNode3 <T> pre, ViDoubleLinkNode3 <T> next) { pre._next = next; next._pre = pre; }
//+----------------------------------------------------------------------------------------------------------------------------- public static void Next(ref ViDoubleLinkNode3 <T> node) { //ViDebuger.AssertError(node != null && node._next != null); node = node._next; }
internal Enumerator(ViDoubleLink3 <T> list) { _root = list._root; _node = list._root._next; _current = default(T); }
public void Reset() { _node = _root._next; }