6 个版本 (2 个稳定版)
1.1.0 | 2020 年 3 月 18 日 |
---|---|
1.0.0 | 2019 年 11 月 19 日 |
1.0.0-beta.4 | 2019 年 11 月 14 日 |
1.0.0-beta.1 | 2019 年 11 月 10 日 |
#21 in #dst
3,367 个月下载量
在 4 个 crate 中使用 (通过 dsrs)
30KB
541 行
thin-dst
存储切片及其长度内联的封装自定义 DST。使用标准库集合类型以实现完全互操作性,并提供薄所有者指针以供空间敏感使用。
替代方案
slice-dst 是此 crate 的继任者,它以及其他 pointer-utils crate 提供了更可组合的 API。
此 crate 将继续进行被动维护,但任何未来的开发都将专注于 pointer-utils/slice-dst。
示例
最简单的示例就是一个封装的切片
let boxed_slice = ThinBox::new((), vec![0, 1, 2, 3, 4, 5]);
assert_eq!(&*boxed_slice, &[0, 1, 2, 3, 4, 5][..]);
let boxed_slice: Box<ThinData<(), u32>> = boxed_slice.into();
所有的薄集合类型都是使用一个 "头" 和一个 "尾" 构造的。头是您想与切片关联的任何 Sized
类型。尾是您想存储的数据的所有权切片。
这创建了一个 ThinData
集合,它像 { head, tail }
,并处理了自定义切片 DST 和薄 DST 指针所需的 unsafe
。最直观的使用方法是使用透明的新类型封装 thin-dst 的使用
#[repr(transparent)]
struct NodeData(ThinData<NodeHead, Node>);
struct Node(ThinArc<NodeHead, Node>);
然后根据需要通过转换和/或 ref-cast 使用 NodeData
。
许可证
根据您的选择,许可如下
- Apache License,版本 2.0 (LICENSE/APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT 许可证 (LICENSE/MIT 或 http://opensource.org/licenses/MIT)
。
如果您是任何一家将利润置于人之上的高薪工人,您仍然可以使用这个crate。我只是希望您会加入工会,反对您所在工作场所普遍存在的对增长、控制和权力的狂热。请站出来反对他们对那些薪酬较低的同事施加的恶劣工作条件,以及他们对其声称为之奋斗的非常人权的不尊重。
贡献
除非您明确表示不适用,否则您根据Apache-2.0许可证定义的任何有意提交以包含在作品中的贡献,应按上述方式双重授权,不得附加任何额外条款或条件。