#slice #join #memory #split #adjacent

已删除 rejoin_slice

此crate提供将两个相邻内存的slices连接起来的函数

1.0.3 2019年11月4日
1.0.2 2019年11月3日
1.0.0 2019年11月2日

#6 in #adjacent

MIT 协议

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 实现其功能。然而,它提供了一个安全接口。为了确保安全性,它采取了以下预防措施

  1. 从不显式执行指针算术。使用安全API计算指向第一个slices末尾的指针。
  2. 指针之间的比较,尽管在C语言中,当指针来自不同对象时是未定义的行为,但在Rust中可以认为是安全的。这是通过标准库提供的一个安全函数 std::ptr::eq 来确保指针的比较。
  3. unsafe 仅用于调用 std::slice::from_raw_parts 来在检查输入slices在内存中相邻后创建一个新的slices。

无运行时依赖