#raw-pointers #vec #unsafe #ffi #vector

无 std raw-parts

围绕 Vec::from_raw_partsVec::into_raw_parts 的 ergonomic 包装

8 个稳定版本

2.1.0 2024 年 7 月 11 日
2.0.0 2023 年 5 月 31 日
1.1.2 2022 年 8 月 8 日
1.1.1 2021 年 12 月 12 日
1.0.2 2021 年 11 月 19 日

Rust 模式 中排名第 230

Download history 534/week @ 2024-04-23 521/week @ 2024-04-30 274/week @ 2024-05-07 465/week @ 2024-05-14 201/week @ 2024-05-21 343/week @ 2024-05-28 400/week @ 2024-06-04 333/week @ 2024-06-11 215/week @ 2024-06-18 347/week @ 2024-06-25 233/week @ 2024-07-02 603/week @ 2024-07-09 299/week @ 2024-07-16 201/week @ 2024-07-23 411/week @ 2024-07-30 233/week @ 2024-08-06

每月下载量 1,201
5 包(3 个直接)中使用

MIT 许可证

24KB
267

raw-parts

GitHub Actions Code Coverage Discord Twitter
Crate API API trunk

一个围绕 Vec<T> 分解部分的包装器。

此结构包含 Vec 的内部指针、长度和分配的容量。

RawParts 通过为返回值命名,使得 Vec::from_raw_partsVec::into_raw_parts 更易于使用。这防止了将长度和容量两个 usize 值混淆。

用法

将其添加到您的 Cargo.toml

[dependencies]
raw-parts = "2.1.0"

然后像这样分解 Vec<T>

use raw_parts::RawParts;

let v: Vec<i32> = vec![-1, 0, 1];

let RawParts { ptr, length, capacity } = RawParts::from_vec(v);

let rebuilt = unsafe {
    // We can now make changes to the components, such as
    // transmuting the raw pointer to a compatible type.
    let ptr = ptr as *mut u32;
    let raw_parts = RawParts { ptr, length, capacity };

    raw_parts.into_vec()
};
assert_eq!(rebuilt, [4294967295, 0, 1]);

无 std

raw-parts 与 allocno_std 兼容。

最低支持的 Rust 版本

此包至少需要 Rust 1.56.0。此版本可以在次要版本中提升。

许可证

raw-partsMIT 许可证 下授权 (c) Ryan Lopopolo。

无运行时依赖