[−][src]Struct c_vec::CVec
The type representing a foreign mutable chunk of memory.
Example
use c_vec::CVec; let slice = &mut [0, 1, 2]; let ptr = slice.as_mut_ptr(); let cvec = unsafe { CVec::new(ptr, slice.len()) };
Implementations
impl<T> CVec<T>
[src]
pub unsafe fn new(base: *mut T, len: usize) -> CVec<T>
[src]
Create a CVec
from a raw pointer to a buffer with a given length.
Panics if the given pointer is null. The returned vector will not attempt to deallocate the vector when dropped.
Arguments
- base - A unique pointer to a buffer
- len - The number of elements in the buffer
Example
use c_vec::CVec; let slice = &mut [0, 1, 2]; let ptr = slice.as_mut_ptr(); let cvec = unsafe { CVec::new(ptr, slice.len()) };
pub unsafe fn new_with_dtor<F>(base: *mut T, len: usize, dtor: F) -> CVec<T> where
F: FnOnce(*mut T) + 'static,
[src]
F: FnOnce(*mut T) + 'static,
Create a CVec
from a foreign buffer, with a given length,
and a function to run upon destruction.
Panics if the given pointer is null.
Arguments
- base - A unique pointer to a buffer
- len - The number of elements in the buffer
- dtor - A fn to run when the value is destructed, useful
for freeing the buffer, etc.
base
will be passed to it as an argument.
Example
use c_vec::CVec; let slice = &mut [0, 1, 2]; let ptr = slice.as_mut_ptr(); let cvec = unsafe { CVec::new_with_dtor(ptr, slice.len(), |_| println!("free time!")) };
pub fn get(&self, ofs: usize) -> Option<&T>
[src]
Retrieves an element at a given index, returning None
if the requested
index is greater than the length of the vector.
Example
use c_vec::CVec; let slice = &mut [0, 1, 2]; let ptr = slice.as_mut_ptr(); let cvec = unsafe { CVec::new(ptr, slice.len()) }; assert_eq!(cvec.get(1), slice.get(1));
pub unsafe fn get_unchecked(&self, ofs: usize) -> &T
[src]
Returns a reference to an element without doing any check.
Example
use c_vec::CVec; let slice = &mut [0, 1, 2]; let ptr = slice.as_mut_ptr(); let cvec = unsafe { CVec::new(ptr, slice.len()) }; unsafe { assert_eq!(cvec.get_unchecked(1), slice.get_unchecked(1)); }
pub fn get_mut(&mut self, ofs: usize) -> Option<&mut T>
[src]
Retrieves a mutable element at a given index, returning None
if the
requested index is greater than the length of the vector.
Example
use c_vec::CVec; let slice = &mut [0, 1, 2]; let ptr = slice.as_mut_ptr(); let mut cvec = unsafe { CVec::new(ptr, slice.len()) }; if let Some(el) = cvec.get_mut(1) { *el += 10; } assert_eq!(cvec[1], 11);
pub unsafe fn get_unchecked_mut<'a>(&'a mut self, ofs: usize) -> &mut T
[src]
Returns a mutable reference to an element without doing any check.
Example
use c_vec::CVec; let slice = &mut [0, 1, 2]; let ptr = slice.as_mut_ptr(); let mut cvec = unsafe { CVec::new(ptr, slice.len()) }; unsafe { *cvec.get_unchecked_mut(1) += 10; } assert_eq!(cvec[1], 11);
pub unsafe fn into_inner(self) -> *mut T
[src]
Unwrap the pointer without running the destructor
This method retrieves the underlying pointer, and in the process destroys the CVec but without running the destructor. A use case would be transferring ownership of the buffer to a C function, as in this case you would not want to run the destructor.
Note that if you want to access the underlying pointer without
cancelling the destructor, you can simply call transmute
on the return
value of CVec::get
(0)
.
Example
use c_vec::CVec; let slice = &mut [0, 1, 2]; let ptr = slice.as_mut_ptr(); let cvec = unsafe { CVec::new(ptr, slice.len()) }; assert_eq!(unsafe { cvec.into_inner() }, ptr);
pub fn len(&self) -> usize
[src]
Returns the number of items in this vector.
Example
use c_vec::CVec; let slice = &mut [0, 1, 2]; let ptr = slice.as_mut_ptr(); let cvec = unsafe { CVec::new(ptr, slice.len()) }; assert_eq!(cvec.len(), slice.len());
pub fn is_empty(&self) -> bool
[src]
Returns whether this vector is empty.
Example
use c_vec::CVec; let slice = &mut [0, 1, 2]; let ptr = slice.as_mut_ptr(); let cvec = unsafe { CVec::new(ptr, slice.len()) }; assert_eq!(cvec.is_empty(), slice.is_empty());
pub fn as_cslice<'a>(&'a self) -> CSlice<'a, T>
[src]
Returns a CSlice
which is a "view" over the data.
Example
use c_vec::CVec; let slice = &mut [0, 1, 2]; let ptr = slice.as_mut_ptr(); let cvec = unsafe { CVec::new(ptr, slice.len()) }; let cslice = cvec.as_cslice();
pub fn as_cslice_mut<'a>(&'a mut self) -> CSliceMut<'a, T>
[src]
Returns a CSliceMut
which is a mutable "view" over the data.
Example
use c_vec::CVec; let slice = &mut [0, 1, 2]; let ptr = slice.as_mut_ptr(); let mut cvec = unsafe { CVec::new(ptr, slice.len()) }; let cslice = cvec.as_cslice_mut();
pub fn iter<'a>(&'a self) -> CVecIter<'a, T>ⓘ
[src]
Returns an iterator over CVec
data.
Example
use c_vec::CVec; let slice = &mut [0, 1, 2]; let ptr = slice.as_mut_ptr(); let cvec = unsafe { CVec::new(ptr, slice.len()) }; for elem in cvec.iter() { println!("=> {}", elem); }
pub fn iter_mut<'a>(&'a mut self) -> CVecIterMut<'a, T>ⓘNotable traits for CVecIterMut<'a, T>
impl<'a, T> Iterator for CVecIterMut<'a, T> type Item = &'a mut T;
[src]
Notable traits for CVecIterMut<'a, T>
impl<'a, T> Iterator for CVecIterMut<'a, T> type Item = &'a mut T;
Returns a mutable iterator over CVec
data.
Example
use c_vec::CVec; let slice = &mut [0, 1, 2]; let ptr = slice.as_mut_ptr(); let mut cvec = unsafe { CVec::new(ptr, slice.len()) }; for elem in cvec.iter_mut() { *elem += 1; } assert_eq!(cvec[0], 1);
Trait Implementations
impl<T> AsMut<[T]> for CVec<T>
[src]
impl<T> AsRef<[T]> for CVec<T>
[src]
impl<T> Drop for CVec<T>
[src]
impl<T> Index<usize> for CVec<T>
[src]
impl<T> IndexMut<usize> for CVec<T>
[src]
impl<T: Clone> Into<Vec<T>> for CVec<T>
[src]
Auto Trait Implementations
impl<T> !RefUnwindSafe for CVec<T>
impl<T> !Send for CVec<T>
impl<T> !Sync for CVec<T>
impl<T> Unpin for CVec<T>
impl<T> !UnwindSafe for CVec<T>
Blanket Implementations
impl<T> Any for T where
T: 'static + ?Sized,
[src]
T: 'static + ?Sized,
impl<T> Borrow<T> for T where
T: ?Sized,
[src]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]
T: ?Sized,
fn borrow_mut(&mut self) -> &mut T
[src]
impl<T> From<T> for T
[src]
impl<T, U> Into<U> for T where
U: From<T>,
[src]
U: From<T>,
impl<T, U> TryFrom<U> for T where
U: Into<T>,
[src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
[src]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>,
[src]
U: TryFrom<T>,