PeerCastStation.MKV.VInt.ReadUIntAsync C# (CSharp) Method

ReadUIntAsync() public static method

public static ReadUIntAsync ( Stream s, CancellationToken cancel_token ) : Task
s Stream
cancel_token System.Threading.CancellationToken
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);
    }

Usage Example

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