using System; using System.IO; namespace Hjg.Pngcs { // Token: 0x02000037 RID: 55 internal abstract class ProgressiveOutputStream : MemoryStream { // Token: 0x060001F4 RID: 500 RVA: 0x00008072 File Offset: 0x00006272 public ProgressiveOutputStream(int size_0) { this.size = size_0; if (this.size < 8) { throw new PngjException("bad size for ProgressiveOutputStream: " + this.size); } } // Token: 0x060001F5 RID: 501 RVA: 0x000080A5 File Offset: 0x000062A5 public override void Close() { this.Flush(); base.Close(); } // Token: 0x060001F6 RID: 502 RVA: 0x000080B3 File Offset: 0x000062B3 public override void Flush() { base.Flush(); this.CheckFlushBuffer(true); } // Token: 0x060001F7 RID: 503 RVA: 0x000080C2 File Offset: 0x000062C2 public override void Write(byte[] b, int off, int len) { base.Write(b, off, len); this.CheckFlushBuffer(false); } // Token: 0x060001F8 RID: 504 RVA: 0x000080D4 File Offset: 0x000062D4 public void Write(byte[] b) { this.Write(b, 0, b.Length); this.CheckFlushBuffer(false); } // Token: 0x060001F9 RID: 505 RVA: 0x000080E8 File Offset: 0x000062E8 private void CheckFlushBuffer(bool forced) { int num = (int)this.Position; byte[] buffer = this.GetBuffer(); while (forced || num >= this.size) { int num2 = this.size; if (num2 > num) { num2 = num; } if (num2 == 0) { return; } this.FlushBuffer(buffer, num2); this.countFlushed += (long)num2; int num3 = num - num2; num = num3; this.Position = (long)num; if (num3 > 0) { Array.Copy(buffer, num2, buffer, 0, num3); } } } // Token: 0x060001FA RID: 506 protected abstract void FlushBuffer(byte[] b, int n); // Token: 0x060001FB RID: 507 RVA: 0x00008156 File Offset: 0x00006356 public long GetCountFlushed() { return this.countFlushed; } // Token: 0x0400010F RID: 271 private readonly int size; // Token: 0x04000110 RID: 272 private long countFlushed; } }