示例#1
0
 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);
        }
示例#3
0
        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);
        }
示例#4
0
        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);
        }
示例#5
0
 public StringEntry(ReaderBin reader)
 {
     value = reader.ReadUnicodeString();
 }
示例#6
0
 public IntegerEntry(ReaderBin reader)
 {
     value = reader.ReadInt16();
 }
示例#7
0
 public BooleanEntry(ReaderBin reader)
 {
     value = reader.ReadBoolean();
 }
示例#8
0
 public ByteEntry(ReaderBin reader)
 {
     value = reader.ReadByte();
 }