diff options
Diffstat (limited to 'cs/src/Ice/LinkedList.cs')
-rw-r--r-- | cs/src/Ice/LinkedList.cs | 304 |
1 files changed, 0 insertions, 304 deletions
diff --git a/cs/src/Ice/LinkedList.cs b/cs/src/Ice/LinkedList.cs deleted file mode 100644 index e8543cf7324..00000000000 --- a/cs/src/Ice/LinkedList.cs +++ /dev/null @@ -1,304 +0,0 @@ -// ********************************************************************** -// -// Copyright (c) 2003-2012 ZeroC, Inc. All rights reserved. -// -// This copy of Ice is licensed to you under the terms described in the -// ICE_LICENSE file included in this distribution. -// -// ********************************************************************** - -namespace IceUtilInternal -{ - using System; - using System.Collections; - using System.Diagnostics; - - public class LinkedList : ICollection, ICloneable - { - public LinkedList() - { - _head = null; - _tail = null; - _count = 0; - } - - public LinkedList(LinkedList l) - { - _head = null; - _tail = null; - _count = 0; - - Node cursor = l._head; - while(cursor != null) - { - Add(cursor.val); - cursor = cursor.next; - } - } - - public int Count - { - get - { - return _count; - } - } - - public bool IsSynchronized - { - get - { - return false; - } - } - - public object SyncRoot - { - get - { - return this; - } - } - - public void CopyTo(Array array, int index) - { - // - // Check preconditions. - // - if(array == null) - { - throw new ArgumentNullException("array", "array parameter must not be null"); - } - if(index < 0) - { -#if COMPACT - throw new ArgumentOutOfRangeException("index", "index must not be less than zero"); -#else - throw new ArgumentOutOfRangeException("index", _count, "index must not be less than zero"); -#endif - } - if(index >= array.Length) - { - throw new ArgumentException("index out of bounds for array", "index"); - } - if(array.Length - index > _count) - { - throw new ArgumentException("insufficient room in array", "array"); - } - if(array.Rank != 1) - { - throw new ArgumentException("array must be one-dimensional", "array"); - } - - // - // Copy the elements. - // - Node n = _head; - while(n != null) - { - array.SetValue(n.val, index++); - n = (Node)n.next; - } - } - - public IEnumerator GetEnumerator() - { - return new Enumerator(this); - } - - public object Clone() - { - LinkedList l = new LinkedList(); - Node cursor = _head; - while(cursor != null) - { - l.Add(cursor.val); - cursor = cursor.next; - } - return l; - } - - public void Add(object value) - { - Node n = new Node(); - n.val = value; - if(_tail == null) - { - n.prev = null; - n.next = null; - _head = n; - _tail = n; - } - else - { - n.prev = _tail; - n.next = null; - _tail.next = n; - _tail = n; - } - _count++; - } - - public void AddFirst(object value) - { - Node n = new Node(); - n.val = value; - if(_head == null) - { - n.prev = null; - n.next = null; - _head = n; - _tail = n; - } - else - { - n.prev = null; - n.next = _head; - _head.prev = n; - _head = n; - } - _count++; - } - - public bool Remove(object value) - { - Node n = _head; - while(n != null) - { - if(n.val == value) - { - RemoveNode(n); - return true; - } - n = n.next; - } - return false; - } - - private void RemoveNode(Node n) - { - Debug.Assert(n != null); - Debug.Assert(_count != 0); - - if(n.prev != null) - { - n.prev.next = n.next; - } - else - { - _head = n.next; - } - if(n.next != null) - { - n.next.prev = n.prev; - } - else - { - _tail = n.prev; - } - _count--; - } - - internal class Node - { - internal Node next; - internal Node prev; - internal object val; - } - - private Node _head; - private Node _tail; - private int _count; - - public class Enumerator : IEnumerator - { - internal Enumerator(LinkedList list) - { - _list = list; - _current = null; - _movePrev = null; - _moveNext = null; - _removed = false; - } - - public void Reset() - { - _current = null; - _movePrev = null; - _moveNext = null; - _removed = false; - } - - public object Current - { - get - { - if(_current == null) - { - throw new InvalidOperationException("iterator not positioned on an element"); - } - return _current.val; - } - } - - public bool MoveNext() - { - if(_removed) - { - _current = _moveNext; - _moveNext = null; - _movePrev = null; - _removed = false; - } - else - { - if(_current == _list._tail) // Make sure the iterator "sticks" if on last element. - { - return false; - } - _current = _current == null ? _list._head : _current.next; - } - return _current != null; - } - - public bool MovePrev() - { - if(_removed) - { - _current = _movePrev; - _movePrev = null; - _moveNext = null; - _removed = false; - } - else - { - if(_current == _list._head) // Make sure the iterator "sticks" if on first element. - { - return false; - } - _current = _current == null ? _list._tail : _current.prev; - } - return _current != null; - } - - public void Remove() - { - if(_current == null) - { - throw new InvalidOperationException("iterator is not positioned on an element"); - } - _removed = true; - _moveNext = _current.next; // Remember where to move next for call to MoveNext(). - _movePrev = _current.prev; // Remember where to move next for call to MovePrev(). - _list.RemoveNode(_current); - _current = null; - } - - private LinkedList _list; // The list we are iterating over. - private Node _current; // Current iterator position. - private Node _moveNext; // Remembers node that preceded a removed element. - private Node _movePrev; // Remembers node that followed a removed element. - private bool _removed; // True after a call to Remove(), false otherwise. - } - } -} |