Crates.io | ptrplus |
lib.rs | ptrplus |
version | 2.1.0 |
source | src |
created_at | 2016-12-10 22:53:37.670889 |
updated_at | 2022-11-22 06:58:09.62019 |
description | Additional funtionality for pointer types |
homepage | |
repository | https://github.com/tmccombs/ptrplus |
max_upload_size | |
id | 7534 |
size | 22,997 |
Ptrplus is a library that adds additional functionality around raw pointers.
Ptrplus provides traits to convert between raw pointers and safer Rust pointer types. AsPtr
, IntoRaw
,
and FromRaw
provide common traits for types that implement as_ptr
, into_raw
, and from_raw
respectively.
Of note, these traits also have implementations for Option
to handle nullable raw pointers.
use ptrplus::AsPtr;
let x: &u32 = &5;
let y: *const u32 = x.as_ptr();
unsafe {
assert_eq!(*y, 5);
}
use ptrplus::AsPtr;
let x = 5;
let o1: Option<&u32> = None;
let o2: Option<&u32> = Some(&x);
assert!(o1.as_ptr().is_null());
assert!(!o2.as_ptr().is_null());
unsafe {
assert_eq!(*o2.as_ptr(), 5);
}
use ptrplus::IntoRaw;
let x: Box<u32> = Box::new(5);
let y: *mut u32 = IntoRaw::into_raw(x);
unsafe {
assert_eq!(*y, 5);
*y = 6;
Box::from_raw(y);
}
use ptrplus::{FromRaw, IntoRaw};
let o1: Option<Box<u32>> = None;
let o2: Option<Box<u32>> = Some(Box::new(5));
let p1: *mut u32 = o1.into_raw();
let p2: *mut u32 = o2.into_raw();
assert!(p1.is_null());
assert!(!p2.is_null());
unsafe {
assert_eq!(*p2, 5);
let o1: Option<Box<u32>> = Option::from_raw(p1);
let o2: Option<Box<u32>> = Option::from_raw(p2);
assert!(o1.is_none());
assert!(!o2.is_none());
}