📄 orderedlistaslinkedlist.cs
字号:
namespace Opus6
{
using System;
using System.Collections;
using System.Reflection;
[Version("$Id: OrderedListAsLinkedList.cs,v 1.6 2001/10/28 19:50:09 brpreiss Exp $"), Copyright("Copyright (c) 2001 by Bruno R. Preiss, P.Eng.")]
public class OrderedListAsLinkedList : AbstractSearchableContainer, OrderedList, SearchableContainer, Container, IComparable, IEnumerable
{
public OrderedListAsLinkedList()
{
this.linkedList = new LinkedList();
}
public override void Accept(Visitor visitor)
{
for (LinkedList.Element element1 = this.linkedList.Head; element1 != null; element1 = element1.Next)
{
visitor.Visit(element1.Datum);
if (visitor.IsDone)
{
return;
}
}
}
public override int CompareTo(object arg)
{
throw new MethodNotImplementedException();
}
public override ComparableObject Find(ComparableObject arg)
{
for (LinkedList.Element element1 = this.linkedList.Head; element1 != null; element1 = element1.Next)
{
ComparableObject obj1 = (ComparableObject) element1.Datum;
if (obj1 == arg)
{
return obj1;
}
}
return null;
}
public virtual Cursor FindPosition(ComparableObject arg)
{
LinkedList.Element element1 = this.linkedList.Head;
while (element1 != null)
{
ComparableObject obj1 = (ComparableObject) element1.Datum;
if (obj1 == arg)
{
break;
}
element1 = element1.Next;
}
return new Opus6.OrderedListAsLinkedList.MyCursor(this, element1);
}
public override IEnumerator GetEnumerator()
{
return new Opus6.OrderedListAsLinkedList.Enumerator(this);
}
public override void Insert(ComparableObject obj)
{
this.linkedList.Append(obj);
base.count++;
}
public override bool IsMember(ComparableObject obj)
{
for (LinkedList.Element element1 = this.linkedList.Head; element1 != null; element1 = element1.Next)
{
if (element1.Datum == obj)
{
return true;
}
}
return false;
}
public static void Main()
{
Opus6.Console.WriteLine("OrderedListAsLinkedList Test");
OrderedList list1 = new OrderedListAsLinkedList();
OrderedListAsArray.TestOrderedList(list1);
}
public override void Purge()
{
this.linkedList = new LinkedList();
base.count = 0;
}
public override void Withdraw(ComparableObject obj)
{
if (base.count == 0)
{
throw new ContainerEmptyException();
}
this.linkedList.Extract(obj);
base.count--;
}
public ComparableObject this[int offset]
{
get
{
if ((offset < 0) || (offset >= base.count))
{
throw new IndexOutOfRangeException();
}
LinkedList.Element element1 = this.linkedList.Head;
for (int num1 = 0; (num1 < offset) && (element1 != null); num1++)
{
element1 = element1.Next;
}
return (ComparableObject) element1.Datum;
}
}
protected LinkedList linkedList;
private class Enumerator : IEnumerator
{
internal Enumerator(OrderedListAsLinkedList list)
{
this.element = null;
this.list = list;
}
public bool MoveNext()
{
if (this.element == null)
{
this.element = this.list.linkedList.Head;
}
else
{
this.element = this.element.Next;
}
return (this.element != null);
}
public void Reset()
{
this.element = null;
}
public object Current
{
get
{
if (this.element == null)
{
throw new InvalidOperationException();
}
return this.element.Datum;
}
}
private LinkedList.Element element;
private OrderedListAsLinkedList list;
}
protected class MyCursor : Cursor
{
internal MyCursor(OrderedListAsLinkedList list, LinkedList.Element element)
{
this.list = list;
this.element = element;
}
public virtual void InsertAfter(ComparableObject obj)
{
this.element.InsertAfter(obj);
this.list.count++;
}
public virtual void InsertBefore(ComparableObject obj)
{
this.element.InsertBefore(obj);
this.list.count++;
}
public void Withdraw()
{
this.list.linkedList.Extract(this.element.Datum);
this.list.count--;
}
public ComparableObject Datum
{
get
{
return (ComparableObject) this.element.Datum;
}
}
private LinkedList.Element element;
private OrderedListAsLinkedList list;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -