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); }