StorageCrc64Composer
Helper code for composing crc64 values together.
using System;
using System.Collections.Generic;
using System.Linq;
namespace Azure.Storage
{
internal static class StorageCrc64Composer
{
public static Memory<byte> Compose(params(byte[] Crc64, long OriginalDataLength)[] partitions)
{
return Compose(partitions.AsEnumerable());
}
public static Memory<byte> Compose(IEnumerable<(byte[] Crc64, long OriginalDataLength)> partitions)
{
return new Memory<byte>(BitConverter.GetBytes(Compose(from tup in (IEnumerable<(byte[], long)>)partitions
select (BitConverter.ToUInt64(tup.Crc64, 0), tup.OriginalDataLength))));
}
public static ulong Compose(IEnumerable<(ulong Crc64, long OriginalDataLength)> partitions)
{
ulong num = 0;
long num2 = 0;
foreach ((ulong, long) partition in partitions) {
num = StorageCrc64Calculator.Concatenate(0, 0, num, (ulong)num2, 0, partition.Item1, (ulong)partition.Item2);
num2 += partition.Item2;
}
return num;
}
}
}