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.
Since this library is about micro-optimizations, I decided to dive into
BitOps
.Firstly, one of the methods (
CeilingPowerOfTwo
) now has a correspondingBitOperations
method (RoundUpToPowerOf2
) which internally does the same thing as theNETSTANDARD
version with optimizations depending on hardware.Secondly, I replaced the while loop in another method with some code copy-pasted from the internal implementation of
BitOperations.PopCount
. I assume the C# team knows best here.Here are some benchmarks. The BitCount optimizations are much more performant in
NETSTANDARD
, whereas the CeilingPowerOfTwo optimizations are the same performance but simpler source code-wise.Benchmark code