Introduce ASIntegerMap, improve our changeset handling #trivial #405
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.
This is a larger, more risky follow-up to #404 .
This introduces ASIntegerMap, which is a pretty wrapper around unordered_map. It also has some handy logic for generating mappings across updates, and there are singletons for identity and null mappings.
This simplifies and unifies our tracking of index changes at the section and item levels, and improves performance by storing these mappings in an immutable store rather than recomputing them for each query.
For most updates, most of the mappings will be the shared identity mapping, and it'll be easy to tell.
Note: I know a lot of code was added to _ASHierarchyChangeSet, but it's also become much more powerful. You can now get O(1) bi-directional index path and section index mappings with very little pre-computation cost.
Note: I haven't tested this against Pinterest yet, only against the sample project in #397 (it works there) and I've done some manual tests.