private void GetCompressedOutput(DeflateInput input, OutputBuffer output, int maxBytesToCopy)
{
int bytesWritten = output.BytesWritten;
int num2 = 0;
int num3 = this.BytesInHistory + input.Count;
do
{
int num4 = (input.Count < this.inputWindow.FreeWindowSpace) ? input.Count : this.inputWindow.FreeWindowSpace;
if (maxBytesToCopy >= 1)
{
num4 = Math.Min(num4, maxBytesToCopy - num2);
}
if (num4 > 0)
{
this.inputWindow.CopyBytes(input.Buffer, input.StartIndex, num4);
input.ConsumeBytes(num4);
num2 += num4;
}
this.GetCompressedOutput(output);
}
while ((this.SafeToWriteTo(output) && this.InputAvailable(input)) && ((maxBytesToCopy < 1) || (num2 < maxBytesToCopy)));
int num6 = output.BytesWritten - bytesWritten;
int num7 = this.BytesInHistory + input.Count;
int num8 = num3 - num7;
if (num6 != 0)
{
this.lastCompressionRatio = ((double) num6) / ((double) num8);
}
}