-
-
Notifications
You must be signed in to change notification settings - Fork 538
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat(data_structures): zero-cost NonMaxU32
type
#9883
base: main
Are you sure you want to change the base?
feat(data_structures): zero-cost NonMaxU32
type
#9883
Conversation
Warning This pull request is not mergeable via GitHub because a downstack PR is open. Once all requirements are satisfied, merge this PR as a stack on Graphite.
How to use the Graphite Merge QueueAdd either label to this PR to merge it via the merge queue:
You must have a Graphite account in order to use the merge queue. Sign up using this link. An organization admin has enabled the Graphite Merge Queue in this repository. Please do not merge from GitHub as this will restart CI on PRs being processed by the merge queue. This stack of pull requests is managed by Graphite. Learn more about stacking. |
CodSpeed Performance ReportMerging #9883 will not alter performanceComparing Summary
|
99c72e2
to
faf48ce
Compare
2ded941
to
e1cd1a7
Compare
faf48ce
to
513f5ec
Compare
513f5ec
to
9694667
Compare
cb0e6b7
to
61aba28
Compare
9694667
to
a111895
Compare
a111895
to
40ea7e0
Compare
61aba28
to
2e023ab
Compare
40ea7e0
to
4d4a502
Compare
Introduce our own
NonMaxU32
type.This version has an advantage over nonmax's version on Linux, Mac and WASI. On those platforms, it utilizes the
std::os::fd::BorrowedFd
type, which is a true non-max type. Therefore, conversion to/fromu32
is completely zero cost, whereas previous version stores the number as aNonZeroU32
and has to performn ^ u32::MAX
on every read/write.NonMaxU32
has a niche, soOption<NonMaxU32>
is 4 bytes.On platforms which don't have
std::os::fd::BorrowedFd
(Windows), we fallback to an implementation which usesNonZeroU32
internally, same as before.