using System; namespace ICSharpCode.SharpZipLib.Zip.Compression { // Token: 0x0200003F RID: 63 public class Deflater { // Token: 0x06000278 RID: 632 RVA: 0x0000CE3A File Offset: 0x0000BE3A public Deflater() : this(-1, false) { } // Token: 0x06000279 RID: 633 RVA: 0x0000CE44 File Offset: 0x0000BE44 public Deflater(int level) : this(level, false) { } // Token: 0x0600027A RID: 634 RVA: 0x0000CE50 File Offset: 0x0000BE50 public Deflater(int level, bool noZlibHeaderOrFooter) { if (level == -1) { level = 6; } else if (level < 0 || level > 9) { throw new ArgumentOutOfRangeException("level"); } this.pending = new DeflaterPending(); this.engine = new DeflaterEngine(this.pending); this.noZlibHeaderOrFooter = noZlibHeaderOrFooter; this.SetStrategy(DeflateStrategy.Default); this.SetLevel(level); this.Reset(); } // Token: 0x0600027B RID: 635 RVA: 0x0000CEB7 File Offset: 0x0000BEB7 public void Reset() { this.state = (this.noZlibHeaderOrFooter ? 16 : 0); this.totalOut = 0L; this.pending.Reset(); this.engine.Reset(); } // Token: 0x1700008C RID: 140 // (get) Token: 0x0600027C RID: 636 RVA: 0x0000CEEA File Offset: 0x0000BEEA public int Adler { get { return this.engine.Adler; } } // Token: 0x1700008D RID: 141 // (get) Token: 0x0600027D RID: 637 RVA: 0x0000CEF7 File Offset: 0x0000BEF7 public long TotalIn { get { return this.engine.TotalIn; } } // Token: 0x1700008E RID: 142 // (get) Token: 0x0600027E RID: 638 RVA: 0x0000CF04 File Offset: 0x0000BF04 public long TotalOut { get { return this.totalOut; } } // Token: 0x0600027F RID: 639 RVA: 0x0000CF0C File Offset: 0x0000BF0C public void Flush() { this.state |= 4; } // Token: 0x06000280 RID: 640 RVA: 0x0000CF1C File Offset: 0x0000BF1C public void Finish() { this.state |= 12; } // Token: 0x1700008F RID: 143 // (get) Token: 0x06000281 RID: 641 RVA: 0x0000CF2D File Offset: 0x0000BF2D public bool IsFinished { get { return this.state == 30 && this.pending.IsFlushed; } } // Token: 0x17000090 RID: 144 // (get) Token: 0x06000282 RID: 642 RVA: 0x0000CF46 File Offset: 0x0000BF46 public bool IsNeedingInput { get { return this.engine.NeedsInput(); } } // Token: 0x06000283 RID: 643 RVA: 0x0000CF53 File Offset: 0x0000BF53 public void SetInput(byte[] input) { this.SetInput(input, 0, input.Length); } // Token: 0x06000284 RID: 644 RVA: 0x0000CF60 File Offset: 0x0000BF60 public void SetInput(byte[] input, int offset, int count) { if ((this.state & 8) != 0) { throw new InvalidOperationException("Finish() already called"); } this.engine.SetInput(input, offset, count); } // Token: 0x06000285 RID: 645 RVA: 0x0000CF85 File Offset: 0x0000BF85 public void SetLevel(int level) { if (level == -1) { level = 6; } else if (level < 0 || level > 9) { throw new ArgumentOutOfRangeException("level"); } if (this.level != level) { this.level = level; this.engine.SetLevel(level); } } // Token: 0x06000286 RID: 646 RVA: 0x0000CFC0 File Offset: 0x0000BFC0 public int GetLevel() { return this.level; } // Token: 0x06000287 RID: 647 RVA: 0x0000CFC8 File Offset: 0x0000BFC8 public void SetStrategy(DeflateStrategy strategy) { this.engine.Strategy = strategy; } // Token: 0x06000288 RID: 648 RVA: 0x0000CFD6 File Offset: 0x0000BFD6 public int Deflate(byte[] output) { return this.Deflate(output, 0, output.Length); } // Token: 0x06000289 RID: 649 RVA: 0x0000CFE4 File Offset: 0x0000BFE4 public int Deflate(byte[] output, int offset, int length) { int num = length; if (this.state == 127) { throw new InvalidOperationException("Deflater closed"); } if (this.state < 16) { int num2 = 30720; int num3 = this.level - 1 >> 1; if (num3 < 0 || num3 > 3) { num3 = 3; } num2 |= num3 << 6; if ((this.state & 1) != 0) { num2 |= 32; } num2 += 31 - num2 % 31; this.pending.WriteShortMSB(num2); if ((this.state & 1) != 0) { int adler = this.engine.Adler; this.engine.ResetAdler(); this.pending.WriteShortMSB(adler >> 16); this.pending.WriteShortMSB(adler & 65535); } this.state = 16 | (this.state & 12); } for (;;) { int num4 = this.pending.Flush(output, offset, length); offset += num4; this.totalOut += (long)num4; length -= num4; if (length == 0 || this.state == 30) { goto IL_1DE; } if (!this.engine.Deflate((this.state & 4) != 0, (this.state & 8) != 0)) { if (this.state == 16) { break; } if (this.state == 20) { if (this.level != 0) { for (int i = 8 + (-this.pending.BitCount & 7); i > 0; i -= 10) { this.pending.WriteBits(2, 10); } } this.state = 16; } else if (this.state == 28) { this.pending.AlignToByte(); if (!this.noZlibHeaderOrFooter) { int adler2 = this.engine.Adler; this.pending.WriteShortMSB(adler2 >> 16); this.pending.WriteShortMSB(adler2 & 65535); } this.state = 30; } } } return num - length; IL_1DE: return num - length; } // Token: 0x0600028A RID: 650 RVA: 0x0000D1D2 File Offset: 0x0000C1D2 public void SetDictionary(byte[] dictionary) { this.SetDictionary(dictionary, 0, dictionary.Length); } // Token: 0x0600028B RID: 651 RVA: 0x0000D1DF File Offset: 0x0000C1DF public void SetDictionary(byte[] dictionary, int index, int count) { if (this.state != 0) { throw new InvalidOperationException(); } this.state = 1; this.engine.SetDictionary(dictionary, index, count); } // Token: 0x0400015A RID: 346 public const int BEST_COMPRESSION = 9; // Token: 0x0400015B RID: 347 public const int BEST_SPEED = 1; // Token: 0x0400015C RID: 348 public const int DEFAULT_COMPRESSION = -1; // Token: 0x0400015D RID: 349 public const int NO_COMPRESSION = 0; // Token: 0x0400015E RID: 350 public const int DEFLATED = 8; // Token: 0x0400015F RID: 351 private const int IS_SETDICT = 1; // Token: 0x04000160 RID: 352 private const int IS_FLUSHING = 4; // Token: 0x04000161 RID: 353 private const int IS_FINISHING = 8; // Token: 0x04000162 RID: 354 private const int INIT_STATE = 0; // Token: 0x04000163 RID: 355 private const int SETDICT_STATE = 1; // Token: 0x04000164 RID: 356 private const int BUSY_STATE = 16; // Token: 0x04000165 RID: 357 private const int FLUSHING_STATE = 20; // Token: 0x04000166 RID: 358 private const int FINISHING_STATE = 28; // Token: 0x04000167 RID: 359 private const int FINISHED_STATE = 30; // Token: 0x04000168 RID: 360 private const int CLOSED_STATE = 127; // Token: 0x04000169 RID: 361 private int level; // Token: 0x0400016A RID: 362 private bool noZlibHeaderOrFooter; // Token: 0x0400016B RID: 363 private int state; // Token: 0x0400016C RID: 364 private long totalOut; // Token: 0x0400016D RID: 365 private DeflaterPending pending; // Token: 0x0400016E RID: 366 private DeflaterEngine engine; } }