#队列 #栈分配 #固定长度 #抽象层 #有界 # #多队列

multi_stack_queue

有界长度的栈分配多队列的抽象层。进行中

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日

#1393Rust 模式

MIT 许可证

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 不必实现 CopyDefault,这可能在某些用例中更有益。另一个想法是使用 MaybeUnInit 类型。 [X] 在 MultiStackQueue 的泛型定义中添加选项,以使用户能够在队列满时执行 push 或在空队列时执行 pop 的操作。例如,可以将元素推送到下一个队列(以及尝试从队列中弹出元素时也是如此)。这将添加一种“溢出机制”。

无运行时依赖