1 个不稳定版本
0.1.0 | 2022年5月15日 |
---|
293 在 无标准库
11KB
55 行
array-append
array-append
导出了一组用于操作 const 泛型数组类型的函数
concat
用于连接两个数组push_right
和push_left
分别用于向数组的末尾或开头添加元素split
和split_end
用于将数组分割成两个数组pop_right
和pop_left
分别从数组中分离出最后一个或第一个元素
以及一些别名
push
/pop
分别对应于push_right
/pop_right
unshift
/shift
分别对应于push_left
/pop_left
由于使用了 #![feature(generic_const_exprs)]
,这个库需要 nightly 编译器。所有不安全代码都通过手动证明和 Miri 验证为安全。
这个库目前不需要标准库,但无论如何都会引入,除非禁用了 std
默认特性。这是为了向前兼容性,以防将来添加依赖于 std
的代码。
示例
创建一个无分配构建器
#![allow(incomplete_features)]
#![feature(generic_const_exprs)]
use array_append::push;
#[derive(PartialEq, Debug)]
struct Built<const N: usize> {
whatever: [usize; N]
}
struct Builder<const N: usize> {
whatever: [usize; N]
}
impl Builder<0> {
pub fn new() -> Self {
Self { whatever: [] }
}
}
impl<const N: usize> Builder<N> {
pub fn from_array(array: [usize; N]) -> Self {
Self { whatever: array }
}
pub fn with_usize(self, new: usize) -> Builder<{N + 1}> {
// Can't use `Self` here, because `Self` is `Builder<N>`
Builder { whatever: push(self.whatever, new) }
}
pub fn build(self) -> Built<N> {
Built { whatever: self.whatever }
}
}
assert_eq!(
Builder::new()
.with_usize(1)
.with_usize(2)
.with_usize(3)
.build(),
Builder::from_array([1, 2, 3]).build()
);