|
|
@@ -28,7 +28,6 @@ public readonly struct LuaValue : IEquatable<LuaValue>
|
|
|
|
|
|
public LuaValueType Type => type;
|
|
|
|
|
|
- [MethodImpl(MethodImplOptions.AggressiveInlining)]
|
|
|
public bool TryRead<T>(out T result)
|
|
|
{
|
|
|
var t = typeof(T);
|
|
|
@@ -211,6 +210,35 @@ public readonly struct LuaValue : IEquatable<LuaValue>
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
|
|
|
+ internal T UnsafeRead<T>()
|
|
|
+ {
|
|
|
+ switch (type)
|
|
|
+ {
|
|
|
+ case LuaValueType.Boolean:
|
|
|
+ {
|
|
|
+ var v = value == 1;
|
|
|
+ return Unsafe.As<bool, T>(ref v);
|
|
|
+ }
|
|
|
+ case LuaValueType.Number:
|
|
|
+ {
|
|
|
+ var v = value;
|
|
|
+ return Unsafe.As<double, T>(ref v);
|
|
|
+ }
|
|
|
+ case LuaValueType.String:
|
|
|
+ case LuaValueType.Thread:
|
|
|
+ case LuaValueType.Function:
|
|
|
+ case LuaValueType.Table:
|
|
|
+ case LuaValueType.UserData:
|
|
|
+ {
|
|
|
+ var v = referenceValue!;
|
|
|
+ return Unsafe.As<object, T>(ref v);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return default!;
|
|
|
+ }
|
|
|
+
|
|
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
|
|
public bool ToBoolean()
|
|
|
{
|