Skip to content

Commit ca196d5

Browse files
committed
add sliced Deref, DerefMut, AsRef, AsMut
1 parent ea9437c commit ca196d5

File tree

2 files changed

+58
-6
lines changed

2 files changed

+58
-6
lines changed

src/map/slice.rs

+35-3
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ use super::{Bucket, Entries, IndexMap, Iter, IterMut, Keys, Values, ValuesMut};
33
use core::cmp::Ordering;
44
use core::fmt;
55
use core::hash::{Hash, Hasher};
6-
use core::ops::{self, Index, IndexMut};
6+
use core::ops::{self, Deref, DerefMut, Index, IndexMut};
77

88
/// A dynamically-sized slice of key-value pairs in an `IndexMap`.
99
///
@@ -44,13 +44,45 @@ impl<K, V, S> IndexMap<K, V, S> {
4444
}
4545
}
4646

47-
impl<K, V> Iter<'_, K, V> {
47+
impl<K, V, S> Deref for IndexMap<K, V, S> {
48+
type Target = Slice<K, V>;
49+
50+
fn deref(&self) -> &Self::Target {
51+
self.as_slice()
52+
}
53+
}
54+
55+
impl<K, V, S> DerefMut for IndexMap<K, V, S> {
56+
fn deref_mut(&mut self) -> &mut Self::Target {
57+
self.as_mut_slice()
58+
}
59+
}
60+
61+
impl<K, V, S> AsRef<Slice<K, V>> for IndexMap<K, V, S> {
62+
fn as_ref(&self) -> &Slice<K, V> {
63+
self.as_slice()
64+
}
65+
}
66+
67+
impl<K, V, S> AsMut<Slice<K, V>> for IndexMap<K, V, S> {
68+
fn as_mut(&mut self) -> &mut Slice<K, V> {
69+
self.as_mut_slice()
70+
}
71+
}
72+
73+
impl<'a, K, V> Iter<'a, K, V> {
4874
/// Returns a slice of the remaining entries in the iterator.
49-
pub fn as_slice(&self) -> &Slice<K, V> {
75+
pub fn as_slice(&self) -> &'a Slice<K, V> {
5076
Slice::from_slice(self.iter.as_slice())
5177
}
5278
}
5379

80+
impl<K, V> AsRef<Slice<K, V>> for Iter<'_, K, V> {
81+
fn as_ref(&self) -> &Slice<K, V> {
82+
self.as_slice()
83+
}
84+
}
85+
5486
impl<'a, K, V> IterMut<'a, K, V> {
5587
/// Returns a slice of the remaining entries in the iterator.
5688
///

src/set/slice.rs

+23-3
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ use super::{Bucket, Entries, IndexSet, Iter};
33
use core::cmp::Ordering;
44
use core::fmt;
55
use core::hash::{Hash, Hasher};
6-
use core::ops::{self, Index};
6+
use core::ops::{self, Deref, Index};
77

88
/// A dynamically-sized slice of values in an `IndexSet`.
99
///
@@ -33,13 +33,33 @@ impl<T, S> IndexSet<T, S> {
3333
}
3434
}
3535

36-
impl<T> Iter<'_, T> {
36+
impl<T, S> Deref for IndexSet<T, S> {
37+
type Target = Slice<T>;
38+
39+
fn deref(&self) -> &Self::Target {
40+
self.as_slice()
41+
}
42+
}
43+
44+
impl<T, S> AsRef<Slice<T>> for IndexSet<T, S> {
45+
fn as_ref(&self) -> &Slice<T> {
46+
self.as_slice()
47+
}
48+
}
49+
50+
impl<'a, T> Iter<'a, T> {
3751
/// Returns a slice of the remaining entries in the iterator.
38-
pub fn as_slice(&self) -> &Slice<T> {
52+
pub fn as_slice(&self) -> &'a Slice<T> {
3953
Slice::from_slice(self.iter.as_slice())
4054
}
4155
}
4256

57+
impl<T> AsRef<Slice<T>> for Iter<'_, T> {
58+
fn as_ref(&self) -> &Slice<T> {
59+
self.as_slice()
60+
}
61+
}
62+
4363
impl<T> Slice<T> {
4464
/// Return the number of elements in the set slice.
4565
pub fn len(&self) -> usize {

0 commit comments

Comments
 (0)