Implement an O(1) stack treemap move iterator #10214
Closed
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.
Because the move iterator contains ownership of the tree, we can destructure it
as we go (and modify the internal structure). This also allows us to make the
move iterator for a treemap invertable and exactly sized (for an enumerable
variant). Sadly, I know of no way to extend this to a normal iterator, so iter()
will still require a stack allocation for now.
Additionally, this implements the clear() method in terms of move_iter() to
force O(1) stack usage when clearing a tree. I tried to implement this in a Drop
implementation for
TreeMap
as well, but I ran into ICE problems about somemissing vtables, so I'll leave that implementation for a later date. The idea
would be that dropping a
TreeMap
requires O(1) stack space instead of O(depth)stack space.