using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Security.Cryptography;
using System.Text.Json;
using XFEEDToolBox.Plugin;
var results=Enumerable.Range(0,8).Select(_=>Navigation.RunStateFixture()).ToArray();
var report=new{sourceLinked=true,gameAccess=false,gameCalls=0,nativeAotBuilt=false,expected=65535,results,passed=results.All(v=>v==65535),
dependencySha256=Convert.ToHexStringLower(SHA256.HashData(File.ReadAllBytes("artifacts/galaxy-state-facts-probe/GeneratedFactHash.cs")))};
File.WriteAllText("artifacts/galaxy-state-facts-probe/result.json",JsonSerializer.Serialize(report,new JsonSerializerOptions{WriteIndented=true}));
Console.WriteLine(JsonSerializer.Serialize(report));if(!report.passed)Environment.ExitCode=1;
namespace XFEEDToolBox.Plugin
{
internal static unsafe class Platform
{
private static readonly Dictionary<nuint,nuint> allocations=[];
internal static nuint Allocate(nuint size){var value=(nuint)NativeMemory.AllocZeroed(size);if(value!=0)allocations[value]=size;return value;}
internal static void Free(nuint address){allocations.Remove(address);NativeMemory.Free((void*)address);}
internal static byte[] ReadBytes(nuint address,int length)
{
if(!allocations.Any(p=>address>=p.Key&&address-p.Key<=p.Value&&(nuint)length<=p.Value-(address-p.Key)))throw new InvalidDataException("Outside owned fixture memory");
return new ReadOnlySpan<byte>((void*)address,length).ToArray();
}
internal static void Write<T>(nuint address,T value)where T:unmanaged{ReadBytes(address,Unsafe.SizeOf<T>());Unsafe.Write((void*)address,value);}
internal static void WriteBytes(nuint address,byte[] value){ReadBytes(address,value.Length);value.CopyTo(new Span<byte>((void*)address,value.Length));}
}
internal static unsafe partial class Navigation
{
internal static uint RunStateFixture()=>GalaxyStateFactsSelfTest();
static T Read<T>(nuint address)where T:unmanaged=>MemoryMarshal.Read<T>(Platform.ReadBytes(address,Unsafe.SizeOf<T>()));
static nuint Pointer(nuint address)=>Read<nuint>(address);
static void Write<T>(nuint address,T value)where T:unmanaged=>Platform.Write(address,value);
static bool Enabled()=>false;static bool inGame=>false;static nuint image=>0;static uint owningThread=>0;
static uint GetCurrentThreadId()=>0;static ulong GetTickCount64()=>0;
static Snapshot Current()=>new();static nuint RegisteredComponent(nuint registry,uint type)=>0;
internal sealed class Snapshot{internal bool valid=>false;internal ulong entity=>0;internal ulong referenceWorld=>0;}
internal sealed class GalaxyFilterContext{internal nuint expectedImage,metadata;internal uint thread=>0;internal ulong tick=>0;internal ulong entity=>0;internal ulong currentSystem=>0;}
}
}
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Security.Cryptography;
using System.Text.Json;
using XFEEDToolBox.Plugin;
var results=Enumerable.Range(0,8).Select(_=>Navigation.RunStateFixture()).ToArray();
var report=new{sourceLinked=true,gameAccess=false,gameCalls=0,nativeAotBuilt=false,expected=65535,results,passed=results.All(v=>v==65535),
dependencySha256=Convert.ToHexStringLower(SHA256.HashData(File.ReadAllBytes("artifacts/galaxy-state-facts-probe/GeneratedFactHash.cs")))};
File.WriteAllText("artifacts/galaxy-state-facts-probe/result.json",JsonSerializer.Serialize(report,new JsonSerializerOptions{WriteIndented=true}));
Console.WriteLine(JsonSerializer.Serialize(report));if(!report.passed)Environment.ExitCode=1;
namespace XFEEDToolBox.Plugin
{
internal static unsafe class Platform
{
private static readonly Dictionary<nuint,nuint> allocations=[];
internal static nuint Allocate(nuint size){var value=(nuint)NativeMemory.AllocZeroed(size);if(value!=0)allocations[value]=size;return value;}
internal static void Free(nuint address){allocations.Remove(address);NativeMemory.Free((void*)address);}
internal static byte[] ReadBytes(nuint address,int length)
{
if(!allocations.Any(p=>address>=p.Key&&address-p.Key<=p.Value&&(nuint)length<=p.Value-(address-p.Key)))throw new InvalidDataException("Outside owned fixture memory");
return new ReadOnlySpan<byte>((void*)address,length).ToArray();
}
internal static void Write<T>(nuint address,T value)where T:unmanaged{ReadBytes(address,Unsafe.SizeOf<T>());Unsafe.Write((void*)address,value);}
internal static void WriteBytes(nuint address,byte[] value){ReadBytes(address,value.Length);value.CopyTo(new Span<byte>((void*)address,value.Length));}
}
internal static unsafe partial class Navigation
{
internal static uint RunStateFixture()=>GalaxyStateFactsSelfTest();
static T Read<T>(nuint address)where T:unmanaged=>MemoryMarshal.Read<T>(Platform.ReadBytes(address,Unsafe.SizeOf<T>()));
static nuint Pointer(nuint address)=>Read<nuint>(address);
static void Write<T>(nuint address,T value)where T:unmanaged=>Platform.Write(address,value);
static bool Enabled()=>false;static bool inGame=>false;static nuint image=>0;static uint owningThread=>0;
static uint GetCurrentThreadId()=>0;static ulong GetTickCount64()=>0;
static Snapshot Current()=>new();static nuint RegisteredComponent(nuint registry,uint type)=>0;
internal sealed class Snapshot{internal bool valid=>false;internal ulong entity=>0;internal ulong referenceWorld=>0;}
internal sealed class GalaxyFilterContext{internal nuint expectedImage,metadata;internal uint thread=>0;internal ulong tick=>0;internal ulong entity=>0;internal ulong currentSystem=>0;}
}
}