Files
stgsharp/源代码/StgSharp/Math/IO/M128Map.cs
T

71 lines
1.7 KiB
C#

using StgSharp;
using StgSharp.Control;
using StgSharp.Logic;
using System.Data;
using System.Runtime.InteropServices;
namespace StgSharp.Math
{
public unsafe class M128Map
{
public readonly long mapID;
internal long mapPtr;
internal readonly StgSharp.LinkedListNode<long> _unusedM128Header;
private const int mapSize = 30 * 30;
internal StgSharp.LinkedList<long> m128Map =
new StgSharp.LinkedList<long>();
public bool isFull
{
get
{
return _unusedM128Header == m128Map._hook;
}
}
public M128Map()
{
mapPtr = (long)(Marshal.AllocHGlobal(sizeof(M128)*mapSize)+15);
long firstM128ptr = (mapPtr / 16 + 1) * 16;
m128Map.Add(0);
_unusedM128Header = m128Map._hook._next;
for (int i = 0; i < 4*30*30*4; i+=16)
{
m128Map.Add(firstM128ptr+i);
}
mapID = Calc.RandomSeed();
}
internal long RegistManagedM128Ptr()
{
LinkedListNode<long> m128 = _unusedM128Header._next;
LinkedListNode<long> m128Previous = _unusedM128Header._previous;
m128._next._previous = _unusedM128Header.Next;
m128Previous._next = m128;
m128._previous = m128Previous;
_unusedM128Header._next = m128._next;
m128._next = _unusedM128Header;
_unusedM128Header._previous = m128;
return m128._value;
}
internal void RecycleManagedM128Ptr()
{
}
}
}