#vec #slice #byte-slice #vector #no-std

no-std fixed-slice-vec

FixedSliceVec 是一个由切片支持,具有运行时确定的最大容量的动态长度 Vec

5个版本 (3个重大变更)

0.10.0 2022年8月3日
0.9.0 2022年7月15日
0.8.0 2021年5月4日
0.7.1 2020年10月28日
0.3.0 2020年2月11日

#191 in 嵌入式开发

Download history 140/week @ 2024-03-11 185/week @ 2024-03-18 730/week @ 2024-03-25 972/week @ 2024-04-01 304/week @ 2024-04-08 182/week @ 2024-04-15 896/week @ 2024-04-22 780/week @ 2024-04-29 495/week @ 2024-05-06 257/week @ 2024-05-13 300/week @ 2024-05-20 178/week @ 2024-05-27 245/week @ 2024-06-03 178/week @ 2024-06-10 172/week @ 2024-06-17 178/week @ 2024-06-24

每月791次下载
14 个包中使用 (直接使用2个)

Apache-2.0

61KB
1K SLoC

fixed-slice-vec

FixedSliceVec 是一个由切片支持,具有运行时确定的最大容量的动态长度 Vec。

概览

此库专注于满足以下狭窄用例

  • no_std:无需 std 库的 Rust 编程。
  • 无全局分配器:无法访问 alloc 包。
  • 运行时容量:集合中的最大可能项数或存储的最大可能支持字节数在运行时未知。

入门指南

fixed-slice-vec 是一个 Rust 库,通过 Cargo 构建,并通过 Cargo 进行测试。它除了 Rust 核心库之外没有其他依赖。

要将 fixed-slice-vec 添加到您的 Rust 项目中,请在 Cargo.toml 文件中添加对其的依赖关系。

fixed-slice-vec = "0.10.0"

使用方法

FixedSliceVec

在您的 Rust 项目源代码中,您可以通过多种方式创建 FixedSliceVec(请参阅项目的 Rust API 文档以获取详细信息)。最常见的形式是从未初始化的字节切片构建。

use fixed_slice_vec::FixedSliceVec;
use core::mem::MaybeUninit;
// Safe to construct arrays of uninitialized values.
let mut bytes: [MaybeUninit<u8>; 1024] = unsafe { MaybeUninit::uninit().assume_init() };
let byte_slice = &mut bytes[..512];
let mut vec: FixedSliceVec<f64> = FixedSliceVec::from_uninit_bytes(byte_slice);

assert_eq!(0, vec.len());
assert!(vec.capacity() >= 63, "The exact capacity will depend on source-slice alignment");

vec.try_push(2.7f64).expect("Ran out of capacity unexpectedly");
assert_eq!(1, vec.len());

vec.clear();
assert!(vec.is_empty());

单个模块

作为 FixedSliceVec 的配套,single 子模块提供了用于处理由任意字节切片支持的单个 Rust 值的函数。请参阅 API 文档以获取详细信息及示例。

比较

存在几个其他类似于 Vec 的包,应将其视为替代 FixedSliceVec 的可能选择。

  • 标准库中的 Vec 有由分配器支持的运行时动态容量。如果您可以访问分配器,这可能是您的首选。
  • ArrayVec 具有编译时固定的容量。它被广泛使用,并可在稳定版中找到。
  • StaticVec 具有编译时固定的容量。它使用最新的 const 泛型特性,目前仅在 nightly 版本中可用。
  • SliceVec 具有运行时固定的容量。在其目标用例中,这是与 FixedSliceVec 最接近的。我们是在开发 FixedSliceVec 后才发现它的存在,因此有一些证据表明存在收敛的设计或需求。在过去几年中,它似乎几乎没有维护,没有使用 Rust 中处理未初始化数据的 MaybeUninit 模式,并且在某些情况下未能正确地丢弃项目。它不支持从原始字节创建实例,并且对于某些操作需要 Default 元素。

许可证

版权所有 2020 年 Auxon Corporation,在 Apache 2.0 许可证 下发布。

无运行时依赖