// Generated from executable documentation examples. Edit the source region, then regenerate. using System; using System.IO; using System.IO.Pipelines; using System.Linq; using System.Buffers; using System.Collections.Generic; using System.Dynamic; using System.Globalization; using System.Numerics; using System.Runtime.CompilerServices; using System.Threading; using System.Threading.Tasks; using CStructSharp; using CStructSharp.Codecs; using CStructSharp.Diagnostics; using CStructSharp.Introspection; using CStructSharp.Values; internal static partial class Program { public static void Main() { VariableIntegers(); Console.WriteLine("PASS variable-integers"); } private static void VariableIntegers() { var layout = new CStruct("struct root { uleb128_32 count; uleb128_64 values[count]; sleb128_32 delta; uint8 tail; };", aligned: false); byte[] bytes = layout.Serialize("root", new Dictionary { ["count"] = 2, ["values"] = new ulong[] { 127, 128 }, ["delta"] = -65, ["tail"] = 99 }); SequenceEqual([2, 127, 128, 1, 191, 127, 99], bytes); using var stream = new MemoryStream(bytes); Equal(2, layout.GetArrayLength(stream, "root.values")); Equal(4L, layout.ResolveAddress(stream, "root.delta")); Equal(-65, layout.ReadValue(stream, "root.delta")); stream.Position = 0; layout.Update(stream, "root.values[1]", 129UL); SequenceEqual([2, 127, 129, 1, 191, 127, 99], stream.ToArray()); Throws(() => layout.Update(stream, "root.values[1]", 1UL)); SequenceEqual([2, 127, 129, 1, 191, 127, 99], stream.ToArray()); } private static void Equal(T expected, T actual) { if (!EqualityComparer.Default.Equals(expected, actual)) { throw new InvalidOperationException($"Expected '{expected}', received '{actual}'."); } } private static void SequenceEqual(byte[] expected, byte[] actual) { if (!expected.AsSpan().SequenceEqual(actual)) { throw new InvalidOperationException( $"Expected {Convert.ToHexString(expected)}, received {Convert.ToHexString(actual)}."); } } private static void Throws(Action action) where TException : Exception { try { action(); } catch (TException) { return; } throw new InvalidOperationException($"Expected {typeof(TException).Name}."); } }