diff --git a/src/lib.rs b/src/lib.rs index 3cf70d3..67e4112 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -157,10 +157,10 @@ use core::convert::TryInto; use core::hash::*; use core::iter::FromIterator; use core::marker::PhantomData; -use core::ops::Bound; +use core::ops::{Bound, Index, IndexMut}; use core::ops::{Deref, DerefMut, RangeBounds}; use core::ptr::NonNull; -use core::slice::Iter; +use core::slice::{Iter, SliceIndex}; use core::{fmt, mem, ops, ptr, slice}; use impl_details::*; @@ -2078,6 +2078,20 @@ impl DerefMut for ThinVec { } } +impl> Index for ThinVec { + type Output = >::Output; + + fn index(&self, index: I) -> &Self::Output { + &self.deref()[index] + } +} + +impl> IndexMut for ThinVec { + fn index_mut(&mut self, index: I) -> &mut Self::Output { + &mut self.deref_mut()[index] + } +} + impl Borrow<[T]> for ThinVec { fn borrow(&self) -> &[T] { self.as_slice() @@ -4046,6 +4060,13 @@ mod std_tests { assert!(vec[1] == 2); } + #[test] + fn test_index_mut() { + let mut vec = thin_vec![1, 2, 3]; + vec[1] = 22; + assert!(vec[1] == 22); + } + #[test] #[should_panic] fn test_index_out_of_bounds() {