public static ReadUIntAsync ( Stream s, |
||
s | Stream | |
cancel_token | ||
return | Task |
public static async Task<VInt> ReadUIntAsync(Stream s, CancellationToken cancel_token)
{
int first = await s.ReadByteAsync();
if (first<0) throw new EndOfStreamException();
int len = CheckLength(first);
var bin = new byte[len];
bin[0] = (byte)first;
await s.ReadBytesAsync(bin, 1, len-1, cancel_token);
long res = bin.Aggregate(0L, (r, b) => (r<<8) | b);
res &= (1<<(7*len))-1;
return new VInt(res, bin);
}
public static async Task <Element> ReadHeaderAsync(Stream s, CancellationToken cancel_token) { var id = await VInt.ReadUIntAsync(s, cancel_token).ConfigureAwait(false); var sz = await VInt.ReadUIntAsync(s, cancel_token).ConfigureAwait(false); return(new Element(id, sz)); }