/// <summary> /// Helper method for the treeification of a list of directory descriptors. /// </summary> /// <param name="directoryId"></param> /// <param name="context"></param> private void DeserializeTreeifyDirectoryDescriptor( uint directoryId, DeserializationContext context, ReleaseManifestDirectoryEntry parent = null) { // construct node at index var directoryDescriptor = context.DirectoryDescriptors[directoryId]; var directoryNode = new ReleaseManifestDirectoryEntry(directoryId, context.ReleaseManifest, directoryDescriptor, parent); context.directoryTable[directoryId] = directoryNode; // associate with directory's files // The if statement stops us from setting lastFileId to UINT32.MAX when we are // a childless dir 0 if (directoryDescriptor.FileCount != 0) { var lastFileId = directoryDescriptor.FileStart + directoryDescriptor.FileCount - 1; for (var fileId = directoryDescriptor.FileStart; fileId <= lastFileId; fileId++) { context.FileParentTable[fileId] = directoryNode; } } // load subdirectories var lastSubdirectoryId = directoryDescriptor.SubdirectoryStart + directoryDescriptor.SubdirectoryCount - 1; for (var subdirectoryId = directoryDescriptor.SubdirectoryStart; subdirectoryId <= lastSubdirectoryId; subdirectoryId++) { DeserializeTreeifyDirectoryDescriptor(subdirectoryId, context, directoryNode); } }
private void SerializeDirectory(BinaryWriter writer, ReleaseManifestDirectoryEntry directory) { writer.Write((UInt32)directory.NameStringTableIndex); writer.Write((UInt32)directory.SubdirectoryStart); writer.Write((UInt32)directory.SubdirectoryCount); writer.Write((UInt32)directory.FileStart); writer.Write((UInt32)directory.FileCount); }
internal ReleaseManifestFileEntry( uint fileId, ReleaseManifest releaseManifest, ReleaseManifestFileEntryDescriptor fileDescriptor, ReleaseManifestDirectoryEntry parent ) { m_id = fileId; m_releaseManifest = releaseManifest; m_descriptor = fileDescriptor; m_parent = parent; parent.m_files.Add(this); }
public ReleaseManifestRootDirectoryOverload(ReleaseManifestDirectoryEntry directory, string name) { this.directory = directory; this.name = name; foreach (var subdirectory in directory.m_directories) { subdirectory.m_parent = this; } foreach (var file in directory.m_files) { file.m_parent = this; } }
internal ReleaseManifestDirectoryEntry( uint directoryId, ReleaseManifest releaseManifest, ReleaseManifestDirectoryDescriptor descriptor, ReleaseManifestDirectoryEntry parent ) { m_id = directoryId; m_releaseManifest = releaseManifest; m_descriptor = descriptor; m_parent = parent; if (parent != null) { parent.m_directories.Add(this); } m_directories = new List <ReleaseManifestDirectoryEntry>((int)descriptor.SubdirectoryCount); m_files = new List <ReleaseManifestFileEntry>((int)descriptor.FileCount); }