Hash implementation for NSIndexSet #2881
Merged
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.
We noticed that
NSIndexSet
is missing implementation ofhash
property. Not a big deal, as NSObject provides default hash, but there are some cons:NSIndexSet
s would have different hashes based on their object identifierIndexSet
is backed byNSIndexSet
, deriving same inconvenienceAfter some experiments with NSIndexSet from macOS Foundation, these details were observed:
hash
is always fast.I think the most important detail here is calculation speed, because my first thoughts on implementation were about iterating over all ranges in set. Which is, obviously, slower. But we still could take into account number of ranges to make hash better.
Based on all above, we'd like to suggest hash implementation powered by standard Hasher and based on index count, range count, first and last index.