Struct cudarc::driver::safe::CudaViewMut
source · pub struct CudaViewMut<'a, T> { /* private fields */ }
Expand description
A mutable sub-view into a CudaSlice created by CudaSlice::try_slice_mut() or CudaSlice::slice_mut().
This type is to CudaSlice as &mut [T]
is to Vec<T>
.
Implementations§
source§impl<'a, T> CudaViewMut<'a, T>
impl<'a, T> CudaViewMut<'a, T>
sourcepub fn slice<'b: 'a>(
&'b self,
range: impl RangeBounds<usize>,
) -> CudaView<'a, T>
pub fn slice<'b: 'a>( &'b self, range: impl RangeBounds<usize>, ) -> CudaView<'a, T>
Creates a CudaView at the specified offset from the start of self
.
Panics if range
and 0...self.len()
are not overlapping.
§Example
let mut slice = dev.alloc_zeros::<u8>(100).unwrap();
let mut view = slice.slice_mut(0..50);
let mut view2 = view.slice_mut(0..25);
do_something(&mut view2);
One cannot slice twice into the same CudaViewMut:
let mut slice = dev.alloc_zeros::<u8>(100).unwrap();
let mut view = slice.slice_mut(0..50);
// cannot borrow twice from same view
let mut view1 = slice.slice_mut(0..25);
let mut view2 = slice.slice_mut(25..50);
do_something(view1, view2);
If you need non-overlapping mutable views into a CudaViewMut, you can use CudaViewMut::split_at_mut().
sourcepub fn try_slice<'b: 'a>(
&'b self,
range: impl RangeBounds<usize>,
) -> Option<CudaView<'a, T>>
pub fn try_slice<'b: 'a>( &'b self, range: impl RangeBounds<usize>, ) -> Option<CudaView<'a, T>>
Fallible version of CudaViewMut::slice
sourcepub fn slice_mut<'b: 'a>(
&'b mut self,
range: impl RangeBounds<usize>,
) -> CudaViewMut<'a, T>
pub fn slice_mut<'b: 'a>( &'b mut self, range: impl RangeBounds<usize>, ) -> CudaViewMut<'a, T>
Creates a CudaViewMut at the specified offset from the start of self
.
Panics if range
and 0...self.len()
are not overlapping.
sourcepub fn try_slice_mut<'b: 'a>(
&'b mut self,
range: impl RangeBounds<usize>,
) -> Option<CudaViewMut<'a, T>>
pub fn try_slice_mut<'b: 'a>( &'b mut self, range: impl RangeBounds<usize>, ) -> Option<CudaViewMut<'a, T>>
Fallible version of CudaViewMut::slice_mut
sourcepub fn split_at_mut<'b: 'a>(
&'b mut self,
mid: usize,
) -> (CudaViewMut<'a, T>, CudaViewMut<'a, T>)
pub fn split_at_mut<'b: 'a>( &'b mut self, mid: usize, ) -> (CudaViewMut<'a, T>, CudaViewMut<'a, T>)
Splits the CudaViewMut into two at the given index.
Panics if mid > self.len
.
This method can be used to create non-overlapping mutable views into a CudaViewMut.
let mut slice = dev.alloc_zeros::<u8>(100).unwrap();
let mut view = slice.slice_mut(0..50);
// split the view into two non-overlapping, mutable views
let (mut view1, mut view2) = view.split_at_mut(25);
do_something(view1, view2);
sourcepub fn try_split_at_mut<'b: 'a>(
&'b mut self,
mid: usize,
) -> Option<(CudaViewMut<'a, T>, CudaViewMut<'a, T>)>
pub fn try_split_at_mut<'b: 'a>( &'b mut self, mid: usize, ) -> Option<(CudaViewMut<'a, T>, CudaViewMut<'a, T>)>
Fallible version of CudaViewMut::split_at_mut.
Returns None
if mid > self.len