5 个不稳定版本
0.3.0 | 2021年7月9日 |
---|---|
0.2.2 | 2021年7月6日 |
0.2.1 | 2021年7月4日 |
0.2.0 | 2021年7月4日 |
0.1.0 | 2021年7月3日 |
#1393 在 Rust 模式 中
13KB
132 行
multi_stack_queue
一个用于栈分配固定长度多队列的 crate。多队列是具有给定数量的队列的数组,每个队列都可以独立访问。
基于 Pollux3737 的原始想法。
使用方法
泛型定义如下
MultiStackQueue<T, const N: usize, const M: usize>
其中
T
- 队列中包含的类型N
- 每个队列的长度M
- 队列的数量
示例用法
- 当编写简单的微内核时,调度器可能需要某种类型的多个循环调度。将其分配在栈上可以消除对堆分配器的需求,这对于在资源有限的目标上工作非常有用。
示例
use multi_stack_queue::MultiStackQueue;
#[derive(Debug, PartialEq, Eq)]
struct TestStruct {
a: usize,
b: bool,
}
let mut msq: MultiStackQueue<TestStruct, 16, 8> = MultiStackQueue::new();
let value = TestStruct { a: 42, b: false };
msq.push(7, value).unwrap();
assert_eq!(msq.pop(7).unwrap(), value);
路线图
[X] 使用 Option<T>
数组需要 T
实现 Copy
特性,这可能不适用。另一种方法是使用默认值而不是 Option::None
来初始化数组。这样,T
不必实现 Copy
但 Default
,这可能在某些用例中更有益。另一个想法是使用 MaybeUnInit
类型。 [X] 在 MultiStackQueue
的泛型定义中添加选项,以使用户能够在队列满时执行 push
或在空队列时执行 pop
的操作。例如,可以将元素推送到下一个队列(以及尝试从队列中弹出元素时也是如此)。这将添加一种“溢出机制”。