public static uint ReadUInt32()

in src/DotPulsar/Internal/Extensions/ReadOnlySequenceExtensions.cs [48:97]


    public static uint ReadUInt32(this ReadOnlySequence<byte> sequence, long start, bool isBigEndian)
    {
        if (sequence.Length < 4 + start)
            throw new ArgumentOutOfRangeException(nameof(start), start, "Sequence must be at least 4 bytes long from 'start' to end");

        var reverse = isBigEndian != BitConverter.IsLittleEndian;
        var union = new UIntUnion();
        var read = 0;

        foreach (var memory in sequence)
        {
            if (start > memory.Length)
            {
                start -= memory.Length;
                continue;
            }

            var span = memory.Span;

            for (var i = (int) start; i < span.Length && read < 4; ++i, ++read)
            {
                switch (read)
                {
                    case 0:
                        if (reverse) union.B0 = span[i];
                        else union.B3 = span[i];
                        break;
                    case 1:
                        if (reverse) union.B1 = span[i];
                        else union.B2 = span[i];
                        break;
                    case 2:
                        if (reverse) union.B2 = span[i];
                        else union.B1 = span[i];
                        break;
                    case 3:
                        if (reverse) union.B3 = span[i];
                        else union.B0 = span[i];
                        break;
                }
            }

            if (read == 4)
                break;

            start = 0;
        }

        return union.UInt;
    }