private void ReadFile(Stream stream) { try { Reset(); this.stream = stream; ReaderBin reader = new ReaderBin(stream); string header = ""; try { header = reader.ReadUnicodeString(); if (!header.StartsWith("GOLD")) { throw new CGTStructureException("El encabezado del archivo es inválido"); } } catch (EndOfStreamException e) { throw new CGTStructureException("El encabezado del archivo es inválido", e); } RecordCollection records = new RecordCollection(); while (!(stream.Position == stream.Length)) { records.Add(ReadRecord(reader)); } structure = new CGTStructure(header, records); content = new CGTContent(structure); dfaStates = CreateDFAStates(content); parserStates = CreateParserStates(content); } finally { stream.Close(); } }
static public Entry CreateEntry(ReaderBin reader) { Entry entry = null; byte entryType = reader.ReadByte(); switch (entryType) { case 69: // 'E' entry = new EmptyEntry(); break; case 98: // 'b' entry = new ByteEntry(reader); break; case 66: // 'B' entry = new BooleanEntry(reader); break; case 73: // 'I' entry = new IntegerEntry(reader); break; case 83: // 'S' entry = new StringEntry(reader); break; default: //Unknown throw new CGTStructureException("No se sabe el tipo"); } return(entry); }
private Entry ReadEntry(ReaderBin reader) { Entry entry = EntryFactory.CreateEntry(reader); if (entry == null) { throw new CGTStructureException("Invalid entry type at byte " + (stream.Position - 1)); } return(entry); }
private Record ReadRecord(ReaderBin reader) { Record record = new Record(); byte entriesHeader = reader.ReadByte(); if (entriesHeader != 77) { throw new CGTStructureException("Invalid entries header at byte " + (stream.Position - 1)); } ushort entriesCount = reader.ReadUInt16(); for (int i = 0; i < entriesCount; i++) { record.Entries.Add(ReadEntry(reader)); } return(record); }
public StringEntry(ReaderBin reader) { value = reader.ReadUnicodeString(); }
public IntegerEntry(ReaderBin reader) { value = reader.ReadInt16(); }
public BooleanEntry(ReaderBin reader) { value = reader.ReadBoolean(); }
public ByteEntry(ReaderBin reader) { value = reader.ReadByte(); }