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.
At the moment, we have many places where we consolidate opportunistically to reduce the amount of data as early as possible. This works fine for vectors because we have dedicated functions, and vectors offer mutable access to their contents. It's much harder to implement for containers that do not offer mutable access, such as columns. To avoid losing the benefit of eager consolidation, we introduce a converting container builder that wraps two container builders: The first absorbs inputs, the second absorbs the outputs of the first. This way, we can consolidate the inputs and then stage them in a column, combining the benefits of consolidation and columnar data layout.
This has the beneficial effect that allocations contained in the consolidated output do not last beyond the second container builder, i.e., they are short-lived and can be easily recycled through the allocator on the same thread.
Checklist
$T ⇔ Proto$T
mapping (possibly in a backwards-incompatible way), then it is tagged with aT-proto
label.