3个不稳定版本
0.1.1 | 2021年3月23日 |
---|---|
0.1.0 | 2021年3月23日 |
0.0.0 | 2021年3月23日 |
#1123 in 嵌入式开发
30KB
373 行
array-utils
这是一个no_std堆数组工具集,用于处理const generic数组。固定大小的数组以牺牲速度和方便性为代价换取简单性和可预测性。这主要用于非常低级别的平台或无堆的平台。这个crate将大大提高这些平台上的代码可读性和可维护性。
特性
这个crate提供了初始化、漂移、切片、调整大小、拼接、连接和叠加固定大小数组的函数。所有这些默认都是启用的特性,但也因此可以单独使用。让我们逐个来看一下这些特性。
这个crate只包含永远不会panic的函数。每个无效值都会导致数据截断或数组被填充额外的数据。每个函数的范围、特定行为和其他重要细节都在其页面中进行了说明。
初始化
这个特性提供了4个实用函数。这些是 initialize_from
、initialize_till
、initialize_from_option
和 initialize_from_result
。所有这些函数都提供了一种使用闭包简化初始化大小数组的方法,如它们的文档所示。
漂移/叠加
有两个漂移函数,分别是 drift_to_begin
和 drift_to_end
,它们提供了一种将数组的一部分浮动的功能,可以是数组的开始或结束。这为将一些元素添加到数组的前面或后面提供了一个解决方案。这可以看作是 sized_slice
和 superimpose
组合的一个更优化的快捷方式。还有一个更通用的形式 superimpose
,它允许一个大小为定制的数组覆盖另一个数组。
切片 / 调整大小
普通的大小数组切片的缺点是可能会丢失大小元数据,或者需要附加 .try_into().unwrap()
,这可能会导致崩溃。sized_slice
实用函数提供了一种处理大小数组切片的方式,永远不会崩溃。以类似的方式,处理缩放数组相当繁琐。array_resize
提供了一种简单的方法来处理所有截断或扩展数据,而不会发生崩溃。
拼接 / 连接
splice
和 join
实用工具基本上是 sized_slice
和 superimpose
的更优化的组合。在特定索引处拼接和连接数组可以非常方便地处理数据包和数据流。
用法
由于我们使用的是定制的数组,所以所有实用工具都严重依赖于 const generics。此外,所有函数仅针对具有 Copy
特性的类型实现。一些实用工具,即没有附加 fill
参数的函数,也依赖于 Default
特性。
以下是此 crate 用法的示例。
初始化
use array_utils::initialize_from;
// Use a closure which doubles the index
let even_numbers: [usize; 5] = initialize_from(|index| index * 2);
assert_eq!(even_numbers, [0, 2, 4, 6, 8]);
漂移
use array_utils::{ drift_to_begin, drift_to_end };
let array = [1, 2, 3, 0, 0, 0, 0];
// Float the elements with indices `0..` to the beginning with a margin of `1` elements,
// filling in `0x00` for all new elements.
assert_eq!(drift_to_begin(array, 0, 1, 0x00), [0, 1, 2, 3, 0, 0, 0]);
// Float the elements with indices `..3` to the end with a margin of `0` elements,
// filling in `42` for all new elements.
assert_eq!(drift_to_end(array, 3, 0, 42), [42, 42, 42, 42, 1, 2, 3]);
许可证
使用 MIT 许可证。