diff --git a/VYaml.Core/Parser/YamlParser.TryGet.cs b/VYaml.Core/Parser/YamlParser.TryGet.cs index 9b3f20b..cde7f26 100644 --- a/VYaml.Core/Parser/YamlParser.TryGet.cs +++ b/VYaml.Core/Parser/YamlParser.TryGet.cs @@ -195,6 +195,96 @@ public double ReadScalarAsDouble() return result; } + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public bool TryReadScalarAsString(out string? result) + { + if (CurrentEventType != ParseEventType.Scalar) + { + result = default; + return false; + } + result = currentScalar?.ToString(); + ReadWithVerify(ParseEventType.Scalar); + return true; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public bool TryReadScalarAsBool(out bool result) + { + if (TryGetScalarAsBool(out result)) + { + ReadWithVerify(ParseEventType.Scalar); + return true; + } + return false; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public bool TryReadScalarAsInt32(out int result) + { + if (TryGetScalarAsInt32(out result)) + { + ReadWithVerify(ParseEventType.Scalar); + return true; + } + return false; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public bool TryReadScalarAsInt64(out long result) + { + if (TryGetScalarAsInt64(out result)) + { + ReadWithVerify(ParseEventType.Scalar); + return true; + } + return false; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public bool TryReadScalarAsUInt32(out uint result) + { + if (TryGetScalarAsUInt32(out result)) + { + ReadWithVerify(ParseEventType.Scalar); + return true; + } + return false; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public bool TryReadScalarAsUInt64(out ulong result) + { + if (TryGetScalarAsUInt64(out result)) + { + ReadWithVerify(ParseEventType.Scalar); + return true; + } + return false; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public bool TryReadScalarAsFloat(out float result) + { + if (TryGetScalarAsFloat(out result)) + { + ReadWithVerify(ParseEventType.Scalar); + return true; + } + return false; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public bool TryReadScalarAsDouble(out double result) + { + if (TryGetScalarAsDouble(out result)) + { + ReadWithVerify(ParseEventType.Scalar); + return true; + } + return false; + } + [MethodImpl(MethodImplOptions.AggressiveInlining)] public readonly bool TryGetScalarAsString(out string? value) { @@ -225,6 +315,15 @@ public readonly bool TryGetScalarAsInt32(out int value) return false; } + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public readonly bool TryGetScalarAsUInt32(out uint value) + { + if (currentScalar is { } scalar) + return scalar.TryGetUInt32(out value); + value = default; + return false; + } + [MethodImpl(MethodImplOptions.AggressiveInlining)] public readonly bool TryGetScalarAsInt64(out long value) { @@ -234,6 +333,15 @@ public readonly bool TryGetScalarAsInt64(out long value) return false; } + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public readonly bool TryGetScalarAsUInt64(out ulong value) + { + if (currentScalar is { } scalar) + return scalar.TryGetUInt64(out value); + value = default; + return false; + } + [MethodImpl(MethodImplOptions.AggressiveInlining)] public readonly bool TryGetScalarAsFloat(out float value) { diff --git a/VYaml.Unity/Assets/VYaml/Runtime/Parser/YamlParser.TryGet.cs b/VYaml.Unity/Assets/VYaml/Runtime/Parser/YamlParser.TryGet.cs index 9b3f20b..cde7f26 100644 --- a/VYaml.Unity/Assets/VYaml/Runtime/Parser/YamlParser.TryGet.cs +++ b/VYaml.Unity/Assets/VYaml/Runtime/Parser/YamlParser.TryGet.cs @@ -195,6 +195,96 @@ public double ReadScalarAsDouble() return result; } + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public bool TryReadScalarAsString(out string? result) + { + if (CurrentEventType != ParseEventType.Scalar) + { + result = default; + return false; + } + result = currentScalar?.ToString(); + ReadWithVerify(ParseEventType.Scalar); + return true; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public bool TryReadScalarAsBool(out bool result) + { + if (TryGetScalarAsBool(out result)) + { + ReadWithVerify(ParseEventType.Scalar); + return true; + } + return false; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public bool TryReadScalarAsInt32(out int result) + { + if (TryGetScalarAsInt32(out result)) + { + ReadWithVerify(ParseEventType.Scalar); + return true; + } + return false; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public bool TryReadScalarAsInt64(out long result) + { + if (TryGetScalarAsInt64(out result)) + { + ReadWithVerify(ParseEventType.Scalar); + return true; + } + return false; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public bool TryReadScalarAsUInt32(out uint result) + { + if (TryGetScalarAsUInt32(out result)) + { + ReadWithVerify(ParseEventType.Scalar); + return true; + } + return false; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public bool TryReadScalarAsUInt64(out ulong result) + { + if (TryGetScalarAsUInt64(out result)) + { + ReadWithVerify(ParseEventType.Scalar); + return true; + } + return false; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public bool TryReadScalarAsFloat(out float result) + { + if (TryGetScalarAsFloat(out result)) + { + ReadWithVerify(ParseEventType.Scalar); + return true; + } + return false; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public bool TryReadScalarAsDouble(out double result) + { + if (TryGetScalarAsDouble(out result)) + { + ReadWithVerify(ParseEventType.Scalar); + return true; + } + return false; + } + [MethodImpl(MethodImplOptions.AggressiveInlining)] public readonly bool TryGetScalarAsString(out string? value) { @@ -225,6 +315,15 @@ public readonly bool TryGetScalarAsInt32(out int value) return false; } + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public readonly bool TryGetScalarAsUInt32(out uint value) + { + if (currentScalar is { } scalar) + return scalar.TryGetUInt32(out value); + value = default; + return false; + } + [MethodImpl(MethodImplOptions.AggressiveInlining)] public readonly bool TryGetScalarAsInt64(out long value) { @@ -234,6 +333,15 @@ public readonly bool TryGetScalarAsInt64(out long value) return false; } + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public readonly bool TryGetScalarAsUInt64(out ulong value) + { + if (currentScalar is { } scalar) + return scalar.TryGetUInt64(out value); + value = default; + return false; + } + [MethodImpl(MethodImplOptions.AggressiveInlining)] public readonly bool TryGetScalarAsFloat(out float value) { diff --git a/VYaml.Unity/Assets/VYaml/Tests/Emitter/Utf8YamlEmitterTest.cs b/VYaml.Unity/Assets/VYaml/Tests/Emitter/Utf8YamlEmitterTest.cs index 84e4796..0b3cf05 100644 --- a/VYaml.Unity/Assets/VYaml/Tests/Emitter/Utf8YamlEmitterTest.cs +++ b/VYaml.Unity/Assets/VYaml/Tests/Emitter/Utf8YamlEmitterTest.cs @@ -1,3 +1,4 @@ +#nullable enable using System.Buffers; using NUnit.Framework; using VYaml.Emitter;