1.0.3 |
|
---|---|
1.0.2 |
|
1.0.0 |
|
#6 in #adjacent
13KB
173 代码行
rejoin_slice
此crate提供将两个相邻内存的slices连接起来的函数。它适用于从同一slices分割出来的slices,但稍后需要作为一个连续的slices进行处理
let mut values: Vec<_> = util_lib::split_by_streak("aaaaaaabbbbbbbcccccccddddeeeeeeefffggggggggh");
let last_two = &values[values.len()-2].rejoin(&values[values.len()-1]);
assert_eq!(&"ggggggggh", last_two);
关于安全性的说明
此crate内部使用 unsafe
实现其功能。然而,它提供了一个安全接口。为了确保安全性,它采取了以下预防措施
- 从不显式执行指针算术。使用安全API计算指向第一个slices末尾的指针。
- 指针之间的比较,尽管在C语言中,当指针来自不同对象时是未定义的行为,但在Rust中可以认为是安全的。这是通过标准库提供的一个安全函数
std::ptr::eq
来确保指针的比较。 unsafe
仅用于调用std::slice::from_raw_parts
来在检查输入slices在内存中相邻后创建一个新的slices。