6个版本
0.3.0 | 2019年4月12日 |
---|---|
0.2.3 | 2019年2月24日 |
0.2.1 | 2019年1月5日 |
0.2.0 | 2018年8月16日 |
0.1.0 | 2018年8月4日 |
#1890 in 数据结构
每月 56 次下载
35KB
701 行
尺寸向量
Rust类型级别尺寸的向量。
文档
示例
#[macro_use]
use sized_vec::Vec;
use typenum::{U2, U8};
fn main() {
let vec = svec![1, 2, 3, 4, 5];
// Use typenums for type safe index access:
assert_eq!(3, vec[U2::new()]);
// Out of bounds access won't even compile:
assert_eq!(0, vec[U8::new()]); // <- type error!
}
许可
版权所有 2018 Bodil Stokke
本软件受Mozilla公共许可证第2.0版的条款约束。如果随此文件未分发MPL副本,您可以在http://mozilla.org/MPL/2.0/ 获取一份。
行为准则
请注意,该项目以贡献者行为准则发布。通过参与此项目,您同意遵守其条款。
lib.rs
:
类型级别尺寸向量
此包提供了一个Vec<N, A>
类型,它包装了标准Vec<A>
并跟踪其类型级别的尺寸N
。
因为尺寸嵌入在类型中,所以我们可以做一些事情,比如在编译时验证索引查找是否在范围内。
let vec = svec![1, 2, 3];
// This index lookup won't compile, because index `U8` is outside
// the vector's length of `U3`:
assert_eq!(5, vec[U8::new()]);
let vec = svec![1, 2, 3];
// On the other hand, this lookup can be verified to be correct
// by the type system:
assert_eq!(3, vec[U2::new()]);
限制
如果这看起来太好了,那是因为它附带了一些限制:您无法执行可能导致向量长度在编译时无法确定的操作。这包括Extend::extend()
和过滤操作,如Vec::retain()
。
值得注意的是,FromIterator::from_iter
也不可用,但您可以使用Vec::try_from
作为替代。请注意,try_from
需要能够在编译时推断出结果向量的尺寸;无法构建任意长度的向量。
let vec = svec![1, 2, 3, 4, 5];
let new_vec = Vec::try_from_iter(vec.into_iter().map(|i| i + 10));
assert_eq!(Some(svec![11, 12, 13, 14, 15]), new_vec);
依赖项
~0.1–0.9MB
~16K SLoC