using System; using System.Collections.Generic; using System.IO; namespace Hjg.Pngcs.Chunks { // Token: 0x02000006 RID: 6 public class ChunksListForWrite : ChunksList { // Token: 0x0600002C RID: 44 RVA: 0x000027EE File Offset: 0x000009EE internal ChunksListForWrite(ImageInfo info) : base(info) { this.queuedChunks = new List(); this.alreadyWrittenKeys = new Dictionary(); } // Token: 0x0600002D RID: 45 RVA: 0x0000280D File Offset: 0x00000A0D public List GetQueuedById(string id) { return this.GetQueuedById(id, null); } // Token: 0x0600002E RID: 46 RVA: 0x00002817 File Offset: 0x00000A17 public List GetQueuedById(string id, string innerid) { return ChunksList.GetXById(this.queuedChunks, id, innerid); } // Token: 0x0600002F RID: 47 RVA: 0x00002828 File Offset: 0x00000A28 public PngChunk GetQueuedById1(string id, string innerid, bool failIfMultiple) { List queuedById = this.GetQueuedById(id, innerid); if (queuedById.Count == 0) { return null; } if (queuedById.Count > 1 && (failIfMultiple || !queuedById[0].AllowsMultiple())) { throw new PngjException("unexpected multiple chunks id=" + id); } return queuedById[queuedById.Count - 1]; } // Token: 0x06000030 RID: 48 RVA: 0x00002881 File Offset: 0x00000A81 public PngChunk GetQueuedById1(string id, bool failIfMultiple) { return this.GetQueuedById1(id, null, failIfMultiple); } // Token: 0x06000031 RID: 49 RVA: 0x0000288C File Offset: 0x00000A8C public PngChunk GetQueuedById1(string id) { return this.GetQueuedById1(id, false); } // Token: 0x06000032 RID: 50 RVA: 0x00002896 File Offset: 0x00000A96 public bool RemoveChunk(PngChunk c) { return this.queuedChunks.Remove(c); } // Token: 0x06000033 RID: 51 RVA: 0x000028A4 File Offset: 0x00000AA4 public bool Queue(PngChunk chunk) { this.queuedChunks.Add(chunk); return true; } // Token: 0x06000034 RID: 52 RVA: 0x000028B4 File Offset: 0x00000AB4 private static bool shouldWrite(PngChunk c, int currentGroup) { if (currentGroup == 2) { return c.Id.Equals("PLTE"); } if (currentGroup % 2 == 0) { throw new PngjOutputException("bad chunk group?"); } int num2; int num; if (c.mustGoBeforePLTE()) { num = (num2 = 1); } else if (c.mustGoBeforeIDAT()) { num = 3; num2 = (c.mustGoAfterPLTE() ? 3 : 1); } else { num = 5; num2 = 1; } int num3 = num; if (c.Priority) { num3 = num2; } if (ChunkHelper.IsUnknown(c) && c.ChunkGroup > 0) { num3 = c.ChunkGroup; } return currentGroup == num3 || (currentGroup > num3 && currentGroup <= num); } // Token: 0x06000035 RID: 53 RVA: 0x00002948 File Offset: 0x00000B48 internal int writeChunks(Stream os, int currentGroup) { List list = new List(); for (int i = 0; i < this.queuedChunks.Count; i++) { PngChunk pngChunk = this.queuedChunks[i]; if (ChunksListForWrite.shouldWrite(pngChunk, currentGroup)) { if (ChunkHelper.IsCritical(pngChunk.Id) && !pngChunk.Id.Equals("PLTE")) { throw new PngjOutputException("bad chunk queued: " + pngChunk); } if (this.alreadyWrittenKeys.ContainsKey(pngChunk.Id) && !pngChunk.AllowsMultiple()) { throw new PngjOutputException("duplicated chunk does not allow multiple: " + pngChunk); } pngChunk.write(os); this.chunks.Add(pngChunk); this.alreadyWrittenKeys[pngChunk.Id] = (this.alreadyWrittenKeys.ContainsKey(pngChunk.Id) ? (this.alreadyWrittenKeys[pngChunk.Id] + 1) : 1); list.Add(i); pngChunk.ChunkGroup = currentGroup; } } for (int j = list.Count - 1; j >= 0; j--) { this.queuedChunks.RemoveAt(list[j]); } return list.Count; } // Token: 0x06000036 RID: 54 RVA: 0x00002A72 File Offset: 0x00000C72 internal List GetQueuedChunks() { return this.queuedChunks; } // Token: 0x04000029 RID: 41 private List queuedChunks; // Token: 0x0400002A RID: 42 private Dictionary alreadyWrittenKeys; } }