2 个不稳定版本
0.2.0 | 2021 年 7 月 4 日 |
---|---|
0.1.0 | 2021 年 6 月 27 日 |
#916 in Rust 模式
260KB
5K SLoC
memtable - Rust 中的内存表
概述
memtable 为内存使用提供了表格式功能的集合。
此包充当所有子包(如 memtable-core
和 memtable-macros
)的聚合器,在使用任何功能时应只导入此包。
安装
在其核心中,您可以通过将以下内容添加到您的 Cargo.toml
中来导入依赖项
[dependencies]
memtable = "0.2"
如果您想基于用户定义的结构体派生类型化的表格,您可以包含 macros
功能
[dependencies]
memtable = { version = "0.2", features = ["macros"] }
无 std 支持
此外,此库支持 no_std
,包括和不含 alloc
。这是通过关闭默认功能(std
是唯一的默认功能)来实现的。从那里,如果您想包含 alloc
支持,请添加该功能
[dependencies]
# For no_std without alloc support
memtable = { version = "0.2", default-features = false }
# For no_std with alloc support
memtable = { version = "0.2", default-features = false, features = ["alloc"] }
请注意,仅依赖默认提供的 core
将限制您的表格选项为 FixedTable
。您仍然可以使用 macros
功能派生类型化的表格,但您必须显式设置模式为 fixed
。
使用方法
通常,您会想要导入 prelude
以引入相关的特性和结构体
use memtable::prelude::*;
// Create a 2x3 (row x column) table of integers
let mut table = FixedTable::from([
[1, 2, 3],
[4, 5, 6],
]);
// Examine one of the values, replace it, and examine again
assert_eq!(table[(1, 2)], 6);
table[(1, 2)] = 999;
assert_eq!(table[(1, 2)], 999);
表格
在核心库中,您将找到四个主要表格
DynamicTable
:具有动态行和列容量的表格FixedTable
:具有固定行和列容量的表格FixedRowTable
:具有固定行容量和动态列容量的表格FixedColumnTable
:具有动态行容量和固定列容量的表格
特性
Table
:主要特性,公开了在表格上执行的大部分常见操作CellIter
:一个常用的特质,针对单个单元格的表格迭代器,允许与单元格的位置进行配对,并获取迭代器的当前行和列
功能特性
除了基本功能外,该库还提供了一些扩展功能,丰富了表格工具集
- alloc:当启用
no_std
时,加入alloc
包 - csv:启用
FromCsv
(将CSV转换为内存中的表格)和ToCsv
(将内存中的表格转换为CSV) - cell:启用
Cell2
至Cell26
,这些表示泛型枚举,可以用作表格的数据类型,以在表格中启用多种数据类型(例如:DynamicTable<Cell2<String, bool>>
) - macros:启用
Table
宏,以便派生新的结构体,该结构体实现了Table
特质,能够将某些结构体存储到专门的内存表格中 - serde:为所有表格和单元格实现启用serde支持
- sled:启用
SledTable
,通过sled数据库在表格之上提供持久存储 - std:默认启用加入std库;如果移除,则启用
no_std
宏
目前,有一个Table
宏,用于派生一个表格,该表格包含零个或多个特定的结构体。
use memtable::Table;
#[derive(Table)]
struct User {
name: &'static str,
age: u8,
}
// Derives a new struct, User{Table}, that can contain instances of User
// that are broken up into their individual fields
let mut table = UserTable::new();
// Inserting is straightforward as a User is considered a singular row
table.push_row(User {
name: "Fred Flintstone",
age: 51,
});
// You can also pass in a tuple of the fields in order of declaration
table.push_row(("Wilma Flintstone", 47));
// Retrieval by row will provide the fields by ref as a tuple
let (name, age) = table.row(0).unwrap();
assert_eq!(*name, "Fred Flintstone");
assert_eq!(*age, 51);
// Tables of course provide a variety of other methods to inspect data
let mut names = table.name_column();
assert_eq!(names.next(), Some(&"Fred Flintstone"));
assert_eq!(names.next(), Some(&"Wilma Flintstone"));
assert_eq!(names.next(), None);
许可证
根据您的选择,许可协议为Apache License, Version 2.0或MIT许可证。除非您明确表示,否则根据Apache-2.0许可证定义的,您有意提交给vimvar的任何贡献,都将按上述方式双重许可,不附加任何其他条款或条件。
依赖项
~0–2.3MB
~42K SLoC