From 880f3e60cefaa88bce8f8a832a74f73730648971 Mon Sep 17 00:00:00 2001 From: Qrakhen Date: Tue, 16 Dec 2025 10:02:24 +0100 Subject: [PATCH] add some very basic foundation for static typing --- Qrakhen.Qamp.Core/Values/Objects/Obj.cs | 2 +- Qrakhen.Qamp.Core/Values/Value.cs | 14 ++++++++++++-- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/Qrakhen.Qamp.Core/Values/Objects/Obj.cs b/Qrakhen.Qamp.Core/Values/Objects/Obj.cs index ce37a71..58af599 100644 --- a/Qrakhen.Qamp.Core/Values/Objects/Obj.cs +++ b/Qrakhen.Qamp.Core/Values/Objects/Obj.cs @@ -1,6 +1,6 @@ namespace Qrakhen.Qamp.Core.Values.Objects; -public class Obj(ValueType type) : IValue +public class Obj(ValueType type) : IDynamicValue { public bool __gcMarked = false; public int __gcCount = 1; diff --git a/Qrakhen.Qamp.Core/Values/Value.cs b/Qrakhen.Qamp.Core/Values/Value.cs index c4dc70a..2e9899d 100644 --- a/Qrakhen.Qamp.Core/Values/Value.cs +++ b/Qrakhen.Qamp.Core/Values/Value.cs @@ -7,13 +7,21 @@ using T = Qrakhen.Qamp.Core.Values.ValueType; namespace Qrakhen.Qamp.Core.Values; -public interface IValue +public interface IValue +{ + T Data { get; } +} + +public interface IDynamicValue : IValue { T ValueType { get; } } [StructLayout(LayoutKind.Explicit, Size = 0x10)] -public readonly struct Value : IValue, ISerialize, IDebug +public readonly struct Value : + IDynamicValue, + ISerialize, + IDebug { public static readonly Value Void = new Value(); public static readonly Value True = new Value(true); @@ -28,6 +36,8 @@ public readonly struct Value : IValue, ISerialize, IDebug [FieldOffset(0x00)] [Serialized] public readonly Ptr Ptr; [FieldOffset(0x00)] [Serialized] public readonly Ref Ref; + public ulong Data => Unsigned; + [FieldOffset(0x08)] [Serialized] public readonly T Type; [FieldOffset(0x0c)] [Serialized] public readonly uint Meta; // like lengths of arrays or lists