public void Element(CGMElement el) { if (el.ElementClass == 1) { using (CGMBinaryReader reader = this.GetReader(el)) { this.ProcessClass1(el.ElementId, reader); goto Label_0079; } } if (el.ElementClass == 2) { using (CGMBinaryReader reader2 = this.GetReader(el)) { this.ProcessClass2(el.ElementId, reader2); } } else if (el.ElementClass == 3) { using (CGMBinaryReader reader3 = this.GetReader(el)) { this.ProcessClass3(el.ElementId, reader3); } } Label_0079: this.OnElement(el); }
public static void ReadFile(Stream r, IElementHandler h) { ArrayList list = new ArrayList(); int num = (int)r.Length; do { int num5; int num6 = (int)r.Position; int num2 = ReadWordFromFile(r); if ((num2 & 0x1f) == 0x1f) { num5 = ReadWordFromFile(r); } else { num5 = num2 & 0x1f; } int num4 = (num2 & 0xfe0) / 0x20; int num3 = (num2 & 0xf000) / 0x1000; byte[] buffer = new byte[0]; while ((num5 & 0x8000) != 0) { num5 &= 0x7fff; buffer = InreaseArray(buffer, num5); r.Read(buffer, buffer.Length - num5, num5); if ((num5 & 1) != 0) { r.ReadByte(); } num5 = ReadWordFromFile(r); } buffer = InreaseArray(buffer, num5); r.Read(buffer, buffer.Length - num5, num5); if ((num5 & 1) != 0) { r.ReadByte(); } CGMElement el = new CGMElement { ElementId = num4, ElementClass = num3, Offset = num6, Data = buffer }; h.Element(el); }while (r.Position < num); }
protected abstract void OnElement(CGMElement el);
protected CGMBinaryReader GetReader(CGMElement el) { return(new CGMBinaryReader(new MemoryStream(el.Data), this.context)); }