Repository navigation
Read the element index from the records of the partition framing - #189
Merged
Merged
Conversation
The element index of the files with their own class schema and the reinforcement reader scanned each partition stream for byte runs that looked like an element header or a root object, which also took the records of the documents of loaded families, whose element ids repeat project ids. A stream whose framing holds is now read by its records: the channel-101 records of the project's own block are the headers and its channel-102 records the root objects, one of each per element, without the copies that record routing marks as not current. A stream whose framing does not hold is scanned as before. On 29 files the scan found 5,987,630 header-like and 6,640,008 block-like items; the framing gives 848,325 of each. On 52 files the IFC and the export report are identical to before; in the compact JSON of one file one element gets its name and properties. Refs #47 Refs #48
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Second step of the read path onto the partition framing; #187 was the first.
The element index of the files with their own class schema (
WideElementRecords.BuildIndex: the header category, design option and outline of each element, the class of its root object, and the field walk of that object) and the reinforcement reader scanned every partition stream position by position for byte runs that looked like an element header or a root object. The scan also took the records of the keyed content blocks, the documents of loaded families, whose element ids repeat project ids; where such a copy differed, the value was dropped as a conflict. Now:RvtFileReader.CutPartition) also lists the records of the project's own block (the null-key map): channel, owner and the place of the whole item in the inflated stream (PartitionFraming.Framed). Chain terminators and the records of keyed blocks are not listed.RecordRouting.Drop), as the chunks already were.ElementHeader, and channel 103 holds onlyGElementandSerializedDummy.RecordRouting.Prunekeeps a chunk that no stale range reaches as the same array, so the framing and the chunks share it.Refs #47, refs #48: both are about byte scans taking items that are not records of the project. This PR moves the index and the reinforcement reader off the scan; the block scan of issue 48 and the class counts of issue 47 are in other readers (the block parser and the stream walk) and are not changed here.
Measured
52 project files of the releases 2020 to 2027, exported with the base branch and with this branch (IFC with its report, compact JSON):
Not covered
Verification
ValidatedTests2,ApiTests.Proxy289128_*3,ElementHeaderBoundingBoxTests3) that fail the same way on main without this change.Prunekeeps an untouched chunk as the same array.