refactor(reader): hoist Materialized* boilerplate into shared base#135
Merged
Conversation
The eight buffer-backed Materialized*Array classes each repeated the same cold plumbing: the dtype/length/buffer triple, the trivial dtype()/length() getters, and the zero-copy materialize()/segmentIfPresent() contract. Extract it into a package-private AbstractMaterializedArray that each leaf now extends. The base deliberately does NOT implement Array (that interface is sealed to the typed element families) and does NOT hoist the hot getX/fold/forEach loops: those stay monomorphic and branch-split in the leaf classes so C2 keeps vectorising them (CLAUDE.md hot-loop rule). Only the cold boilerplate moves. Net -206 LOC, kills the SonarQube duplication smell across the family. Reader suite green (854); javadoc enforcement passes. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
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.
The eight buffer-backed
Materialized*Arrayclasses each repeated the same cold plumbing: thedtype/length/buffertriple, trivialdtype()/length()getters, and the zero-copymaterialize()/segmentIfPresent()contract. Hoisted into a package-privateAbstractMaterializedArraythat each leaf extends.Deliberately:
implements Array— that interface is sealed to the typed element families; each leaf doesextends AbstractMaterializedArray implements IntArray/….getX/fold/forEachloops stay branch-split in the leaves so C2 keeps vectorising them (CLAUDE.md hot-loop rule). Only cold boilerplate moves.Net −206 LOC, kills the SonarQube duplication smell across the family. Reader suite green (854);
verifyjavadoc enforcement passes.🤖 Generated with Claude Code