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;
}