Subversion Repositories general

Rev

Rev 1122 | Blame | Compare with Previous | Last modification | View Log | RSS feed

using System;
using System.Collections;

namespace TCPproxy
{
        public class LinkedList
        {
                private class ListNode
                {
                        public object data;
                        public ListNode next;
                }

                private class LinkedEnumerator : IEnumerator
                {
                        private LinkedList list;
                        private ListNode current;

                        public object Current 
                        { 
                                get 
                                {
                                        if(current == null) throw new InvalidOperationException("No current element");

                                        return current.data;
                                }
                        }

                        public bool MoveNext()
                        {
                                if(current == null)
                                {
                                        current = list.first;
                                        return (current != null);
                                }
                                else
                                {
                                        if(current.next == null) 
                                        {
                                                return false;
                                        }
                                        else 
                                        {
                                                current = current.next;
                                                return true;
                                        }
                                }
                        }

                        public void Reset()
                        {
                                current = null;
                        }

                        public LinkedEnumerator(LinkedList list)
                        {
                                this.list = list;
                        }
                }

                private ListNode first;
                private ListNode last;
                private int      count = 0;

                public int Count
                {
                        get { return count; }
                }

                public IEnumerator GetEnumerator()
                {
                        return new LinkedEnumerator(this);
                }

                public void Add(object obj)
                {
                        ListNode node = new ListNode();
                        node.data = obj;

                        if(last == null) 
                        {
                                first = node;
                        }
                        else 
                        {
                                last.next = node;
                        }
                        last = node;
                        count++;
                }
        }

        public class LinkedListReadOnly
        {
                private LinkedList origin;

                public LinkedListReadOnly(LinkedList origin)
                {
                        this.origin = origin;
                }

                public IEnumerator GetEnumerator()
                {
                        return origin.GetEnumerator();
                }
        }
}