private bool IsContainerSection(BinaryReader reader, RWSectionHeader header, RWSection parent) { reader.BaseStream.Seek(header.StartPos, SeekOrigin.Begin); if (header.Size > HeaderSize) { RWSectionHeader newHeader = new RWSectionHeader(); newHeader.LoadFromStream(reader); if ((newHeader.Version == header.Version) && (newHeader.Size < header.Size)) { reader.BaseStream.Seek(header.StartPos, SeekOrigin.Begin); return true; } } reader.BaseStream.Seek(header.StartPos + header.Size, SeekOrigin.Begin); return false; }
private RWSection LoadSection(BinaryReader reader, RWSection parentSection) { RWSectionHeader header = new RWSectionHeader(); header.LoadFromStream(reader); RWSection section = this.GetFactory(header, parentSection).GetSection(reader, header); if ((section is UnknownSection) && IsContainerSection(reader, header, parentSection)) section = (new RWSectionFactory<ContainerSection>() as IRWSectionFactory).GetSection(reader, header); return section; }