示例#1
0
        private VltBlockContainer ReadBlock(BinaryReader reader)
        {
            if (reader.BaseStream.Position == reader.BaseStream.Length)
            {
                return(null);
            }

            var block = new VltBlock
            {
                Position    = reader.BaseStream.Position,
                Type        = (VltMarker)reader.ReadInt32(),
                BlockLength = reader.ReadInt32(),
            };

            if (!block.IsBlank())
            {
                var vltType = block.Type;

                VltBlockContainer bc;

                switch (vltType)
                {
                case VltMarker.VltMagic:
                    bc = new HeaderBlock();
                    break;

                case VltMarker.TableStart:
                    bc = new TableStartBlock();
                    break;

                case VltMarker.TableEnd:
                    bc = new TableEndBlock();
                    break;

                default:
                    bc = new PlaceholderBlock();
                    break;
                }

                bc.Block = block;
                bc.Read(reader);
                block.SeekToNextBlock(reader.BaseStream);

                return(bc);
            }

            return(null);
        }