6 个版本 (稳定)

2.1.0 2022年11月22日
2.0.0 2022年4月29日
1.1.0 2021年1月13日
1.0.0 2017年1月7日
0.1.0 2016年12月10日

#684 in Rust 模式

Download history 43/week @ 2024-03-13 50/week @ 2024-03-20 43/week @ 2024-03-27 37/week @ 2024-04-03 28/week @ 2024-04-10 32/week @ 2024-04-17 35/week @ 2024-04-24 44/week @ 2024-05-01 58/week @ 2024-05-08 38/week @ 2024-05-15 78/week @ 2024-05-22 121/week @ 2024-05-29 71/week @ 2024-06-05 130/week @ 2024-06-12 191/week @ 2024-06-19 133/week @ 2024-06-26

每月下载量 547 次
用于 12 包(4 个直接使用)

MIT 许可证

21KB
428

Build status Crates.io Crates.io

ptrplus

Ptrplus 是一个围绕原始指针添加额外功能的库。

转换

Ptrplus 提供了将原始指针和更安全的 Rust 指针类型之间进行转换的特质。 AsPtrIntoRawFromRaw 为实现 as_ptrinto_rawfrom_raw 的类型提供了常见的特质。值得注意的是,这些特质也为 Option 提供了实现,以处理可空原始指针。

示例

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());
}

无运行时依赖

功能