/// <summary> /// Initializes a new instance of the <see cref="NefsHeaderPart1"/> class. /// </summary> /// <param name="items">The list of items in the archive sorted by id.</param> /// <param name="part4">Header part 4.</param> internal NefsHeaderPart1(NefsItemList items, NefsHeaderPart4 part4) { this.entriesById = new SortedDictionary <NefsItemId, NefsHeaderPart1Entry>(); var nextMetadataIndex = 0U; // Enumerate this list depth first. This determines the metadata index. // The part 1 entries will be sorted by item id. foreach (var item in items.EnumerateDepthFirstByName()) { var entry = new NefsHeaderPart1Entry(); entry.Data0x00_OffsetToData.Value = item.DataSource.Offset; entry.Data0x08_MetadataIndex.Value = nextMetadataIndex++; entry.Data0x10_Id.Value = item.Id.Value; entry.Data0x0c_IndexIntoPart4.Value = part4.GetIndexForItem(item); this.entriesById.Add(item.Id, entry); } // Part 1 is sorted by item id this.entriesByIndex = new List <NefsHeaderPart1Entry>(this.entriesById.Values); }
/// <summary> /// Initializes a new instance of the <see cref="NefsHeader"/> class. /// </summary> /// <param name="intro">Header intro.</param> /// <param name="toc">Header intro table of contents.</param> /// <param name="part1">Header part 1.</param> /// <param name="part2">Header part 2.</param> /// <param name="part3">Header part 3.</param> /// <param name="part4">Header part 4.</param> /// <param name="part5">Header part 5.</param> /// <param name="part6">Header part 6.</param> /// <param name="part7">Header part 7.</param> /// <param name="part8">Header part 8.</param> public NefsHeader( NefsHeaderIntro intro, NefsHeaderIntroToc toc, NefsHeaderPart1 part1, NefsHeaderPart2 part2, NefsHeaderPart3 part3, NefsHeaderPart4 part4, NefsHeaderPart5 part5, NefsHeaderPart6 part6, NefsHeaderPart7 part7, NefsHeaderPart8 part8) { this.Intro = intro ?? throw new ArgumentNullException(nameof(intro)); this.TableOfContents = toc ?? throw new ArgumentNullException(nameof(toc)); this.Part1 = part1 ?? throw new ArgumentNullException(nameof(part1)); this.Part2 = part2 ?? throw new ArgumentNullException(nameof(part2)); this.Part3 = part3 ?? throw new ArgumentNullException(nameof(part3)); this.Part4 = part4 ?? throw new ArgumentNullException(nameof(part4)); this.Part5 = part5 ?? throw new ArgumentNullException(nameof(part5)); this.Part6 = part6 ?? throw new ArgumentNullException(nameof(part6)); this.Part7 = part7 ?? throw new ArgumentNullException(nameof(part7)); this.Part8 = part8 ?? throw new ArgumentNullException(nameof(part8)); }