Skip to content

Commit debd187

Browse files
Add reverse to OrderMapCore, IndexMap, IndexSet
1 parent da18351 commit debd187

File tree

2 files changed

+20
-0
lines changed

2 files changed

+20
-0
lines changed

src/map.rs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1253,6 +1253,13 @@ where
12531253
self.into_iter()
12541254
}
12551255

1256+
/// Reverses the order of the map’s key-value pairs in place.
1257+
///
1258+
/// Computes in **O(n)** time and **O(1)** space.
1259+
pub fn reverse(&mut self) {
1260+
self.core.reverse()
1261+
}
1262+
12561263
/// Clears the `IndexMap`, returning all key-value pairs as a drain iterator.
12571264
/// Keeps the allocated memory for reuse.
12581265
pub fn drain(&mut self, range: RangeFull) -> Drain<K, V> {
@@ -1752,6 +1759,12 @@ impl<K, V> OrderMapCore<K, V> {
17521759
self.restore_hash_index(side_index);
17531760
}
17541761

1762+
fn reverse(&mut self) {
1763+
let side_index = self.save_hash_index();
1764+
self.entries.reverse();
1765+
self.restore_hash_index(side_index);
1766+
}
1767+
17551768
fn save_hash_index(&mut self) -> Vec<usize> {
17561769
// Temporarily use the hash field in a bucket to store the old index.
17571770
// Save the old hash values in `side_index`. Then we can sort

src/set.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -527,6 +527,13 @@ where
527527
}
528528
}
529529

530+
/// Reverses the order of the set’s values in place.
531+
///
532+
/// Computes in **O(n)** time and **O(1)** space.
533+
pub fn reverse(&mut self) {
534+
self.map.reverse()
535+
}
536+
530537
/// Clears the `IndexSet`, returning all values as a drain iterator.
531538
/// Keeps the allocated memory for reuse.
532539
pub fn drain(&mut self, range: RangeFull) -> Drain<T> {

0 commit comments

Comments
 (0)