Repository navigation
Conversation
lemire
added a commit
that referenced
this pull request
Oct 26, 2026
feat(minor): read and write portable bytes through RawSpan (rebased #31)
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.
Hi @lemire !
The PR drops not required mallocs by adopting a modern Swift API.
RawSpanversions of the portable format API, so bytes can be read where they are instead of being copied into an array first.init?(portableBytes:)deserializes, returning nil if the bytes don't parse.withPortableView(of:)gives a read-only view over the bytes without copying them.portableSerialize(into:)writes into anOutputRawSpan.RoaringBitmap.portableSerialize() -> [UInt8], whichRoaring64Bitmapalready had.RoaringBitmapandRoaring64Bitmap. Swift 6.2.New sanitisers workflow:
Performance improvement
The old frozen API copies the bytes and allocates a bitmap object; the view does neither. Shown on
weather_sept_85, where the gain is largest (~8x); the other datasets gain 1.4-4x.Before, old
portableDeserializeFrozen(bytes:):After, new
withPortableView(of:):