private void Read(BinaryReader reader) { long start = reader.BaseStream.Position; List <IChunk> chunks = new List <IChunk>(); List <string> chunkTags = new List <string>(); Header = reader.Read <teChunkDataHeader>(); if (Header.Magic != Magic) { return; } while (reader.BaseStream.Position - start < Header.Size) { ParseChunks(reader, chunks, chunkTags); } Chunks = chunks.ToArray(); ChunkTags = chunkTags.ToArray(); }
private unsafe void Read(BinaryReader reader) { long start = reader.BaseStream.Position; List <IChunk> chunks = new List <IChunk>(); List <string> chunkTags = new List <string>(); Header = reader.Read <teChunkDataHeader>(); if (Header.Magic != Magic) { return; } long next = reader.BaseStream.Position - start; // rel stream pos while (next < Header.Size) { teChunkDataEntry entry = reader.Read <teChunkDataEntry>(); next += entry.Size + sizeof(teChunkDataEntry); IChunk chunk = Manager.CreateChunkInstance(entry.StringIdentifier, Header.StringIdentifier); if (chunk != null) { MemoryStream dataStream = new MemoryStream(entry.Size); reader.BaseStream.CopyBytes(dataStream, entry.Size); dataStream.Position = 0; chunk.Parse(dataStream); dataStream.Dispose(); } chunkTags.Add(entry.StringIdentifier); chunks.Add(chunk); reader.BaseStream.Position = next + start; } Chunks = chunks.ToArray(); ChunkTags = chunkTags.ToArray(); }