-
Notifications
You must be signed in to change notification settings - Fork 5.2k
Add specialized FrozenSet implementations for byte and char #110842
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
Conversation
src/libraries/System.Collections.Immutable/src/System/Collections/Frozen/Byte/ByteFrozenSet.cs
Outdated
Show resolved
Hide resolved
src/libraries/System.Private.CoreLib/src/System/SearchValues/BitVector256.cs
Show resolved
Hide resolved
src/libraries/System.Private.CoreLib/src/System/SearchValues/ProbabilisticMapState.cs
Show resolved
Hide resolved
.../System.Collections.Immutable/src/System/Collections/Frozen/Char/PerfectHashCharFrozenSet.cs
Show resolved
Hide resolved
|
cc: @dotnet/area-system-collections (the bot was lazy) |
|
Can you point to some places where |
|
Should be similar to As a random example, here's one in Uri, though we could of course use
My main motivation was making the answer to "what should I use for |
|
You decided it wasn't worthwhile? Another option, if you think there is value in it, would be to only have the optimization on core and literally just wrap SearchValues. |
|
I was intrigued by #111886 and wanted to play around with how that would look like for bitmap based That would merge Not sure it's worth having the specialization for all the types though, even if generics makes it relatively "cheap" code-wise. |
Fixes #110783
Adds 3 new
FrozenSetimlpementations:ByteFrozenSet- any set of bytes when using the default comparerLatin1CharFrozenSet- set of chars <= 255 when using the default comparerPerfectHashCharFrozenSet- any set of chars when using the default comparerI extracted the lookup logic from
ProbabilisticMapStateinSearchValuesto a searate helper so that there's practically no code duplication between the two.Benchmark
char.IsAscii && char.IsSymbol(Latin1CharFrozenSet)char.IsSymbol(PerfectHashCharFrozenSet)char.IsSymbolforbytes (ByteFrozenSet)