mirror of
https://github.com/tym1116/BH3.git
synced 2025-12-12 22:44:35 +01:00
86 lines
1.2 KiB
C#
86 lines
1.2 KiB
C#
namespace MoleMole
|
|
{
|
|
public class SimpleLRU<T> where T : class
|
|
{
|
|
private T[] _arr;
|
|
|
|
public int count;
|
|
|
|
public T this[int ix]
|
|
{
|
|
get
|
|
{
|
|
return _arr[ix];
|
|
}
|
|
}
|
|
|
|
public SimpleLRU(int count)
|
|
{
|
|
_arr = new T[count];
|
|
this.count = count;
|
|
}
|
|
|
|
public void Touch(T entry, out T outdated)
|
|
{
|
|
int num = -1;
|
|
for (int i = 0; i < count; i++)
|
|
{
|
|
if (_arr[i] == null)
|
|
{
|
|
num = i;
|
|
break;
|
|
}
|
|
if (_arr[i] == entry)
|
|
{
|
|
outdated = (T)null;
|
|
for (int num2 = i; num2 >= 1; num2--)
|
|
{
|
|
_arr[num2] = _arr[num2 - 1];
|
|
}
|
|
_arr[0] = entry;
|
|
return;
|
|
}
|
|
}
|
|
if (num != -1)
|
|
{
|
|
_arr[num] = entry;
|
|
outdated = (T)null;
|
|
return;
|
|
}
|
|
outdated = _arr[count - 1];
|
|
for (int num3 = count - 1; num3 >= 1; num3--)
|
|
{
|
|
_arr[num3] = _arr[num3 - 1];
|
|
}
|
|
_arr[0] = entry;
|
|
}
|
|
|
|
public void Clear()
|
|
{
|
|
for (int i = 0; i < count; i++)
|
|
{
|
|
_arr[i] = (T)null;
|
|
}
|
|
}
|
|
|
|
public void MarkClear(int ix)
|
|
{
|
|
_arr[ix] = (T)null;
|
|
}
|
|
|
|
public void Rebuild()
|
|
{
|
|
T[] array = new T[count];
|
|
int num = 0;
|
|
for (int i = 0; i < count; i++)
|
|
{
|
|
if (_arr[i] != null)
|
|
{
|
|
array[num++] = _arr[i];
|
|
}
|
|
}
|
|
_arr = array;
|
|
}
|
|
}
|
|
}
|