47 lines
896 B
C#
47 lines
896 B
C#
using System;
|
|
|
|
namespace Unity.IO.Compression
|
|
{
|
|
internal class CopyEncoder
|
|
{
|
|
private const int PaddingSize = 5;
|
|
|
|
private const int MaxUncompressedBlockSize = 65536;
|
|
|
|
public void GetBlock(DeflateInput input, OutputBuffer output, bool isFinal)
|
|
{
|
|
int num = 0;
|
|
if (input != null)
|
|
{
|
|
num = Math.Min(input.Count, output.FreeBytes - 5 - output.BitsInBuffer);
|
|
if (num > 65531)
|
|
{
|
|
num = 65531;
|
|
}
|
|
}
|
|
if (isFinal)
|
|
{
|
|
output.WriteBits(3, 1u);
|
|
}
|
|
else
|
|
{
|
|
output.WriteBits(3, 0u);
|
|
}
|
|
output.FlushBits();
|
|
WriteLenNLen((ushort)num, output);
|
|
if (input != null && num > 0)
|
|
{
|
|
output.WriteBytes(input.Buffer, input.StartIndex, num);
|
|
input.ConsumeBytes(num);
|
|
}
|
|
}
|
|
|
|
private void WriteLenNLen(ushort len, OutputBuffer output)
|
|
{
|
|
output.WriteUInt16(len);
|
|
ushort value = (ushort)(~len);
|
|
output.WriteUInt16(value);
|
|
}
|
|
}
|
|
}
|