您最多选择25个主题
主题必须以中文或者字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
103 行
1.9 KiB
103 行
1.9 KiB
using System;
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
|
|
[Serializable]
|
|
public struct LinkedIndexList
|
|
{
|
|
public int head;
|
|
public int size;
|
|
}
|
|
|
|
[Serializable]
|
|
public struct LinkedIndexItem
|
|
{
|
|
public int next;
|
|
public int prev;
|
|
public int data;
|
|
}
|
|
|
|
[Serializable]
|
|
public struct LinkedIndexEnumerable : IEnumerable<int>
|
|
{
|
|
public LinkedIndexItem[] items;
|
|
public int headIndex;
|
|
|
|
public LinkedIndexEnumerable(LinkedIndexItem[] items, int headIndex)
|
|
{
|
|
this.items = items;
|
|
this.headIndex = headIndex;
|
|
}
|
|
|
|
public LinkedIndexEnumerator GetEnumerator()
|
|
{
|
|
return new LinkedIndexEnumerator(items, headIndex, -1);
|
|
}
|
|
|
|
IEnumerator<int> IEnumerable<int>.GetEnumerator()
|
|
{
|
|
return GetEnumerator();
|
|
}
|
|
|
|
IEnumerator IEnumerable.GetEnumerator()
|
|
{
|
|
return GetEnumerator();
|
|
}
|
|
}
|
|
|
|
[Serializable]
|
|
public struct LinkedIndexEnumerator : IEnumerator<int>
|
|
{
|
|
public LinkedIndexItem[] items;
|
|
public int headIndex;
|
|
public int itemIndex;
|
|
|
|
public LinkedIndexEnumerator(LinkedIndexItem[] items, int headIndex, int itemIndex)
|
|
{
|
|
this.items = items;
|
|
this.headIndex = headIndex;
|
|
this.itemIndex = itemIndex;
|
|
}
|
|
|
|
public int Current
|
|
{
|
|
get { return items[itemIndex].data; }
|
|
}
|
|
|
|
object IEnumerator.Current
|
|
{
|
|
get { return Current; }
|
|
}
|
|
|
|
public bool MoveNext()
|
|
{
|
|
if (itemIndex == -1)
|
|
{
|
|
itemIndex = headIndex;
|
|
return (itemIndex != -1);//return true;
|
|
}
|
|
else
|
|
{
|
|
itemIndex = items[itemIndex].next;
|
|
return (itemIndex != headIndex);
|
|
}
|
|
}
|
|
|
|
public int ReadNext()
|
|
{
|
|
if (MoveNext())
|
|
return Current;
|
|
else
|
|
return -1;
|
|
}
|
|
|
|
public void Reset()
|
|
{
|
|
itemIndex = headIndex;
|
|
}
|
|
|
|
public void Dispose()
|
|
{
|
|
// foo
|
|
}
|
|
}
|