30个版本

0.0.32 2023年3月20日
0.0.31 2023年3月19日
0.0.24 2023年2月18日
0.0.22 2023年1月14日
0.0.7 2022年10月28日

#193 in 内存管理

Download history 30/week @ 2024-03-14 398/week @ 2024-03-21 8/week @ 2024-03-28 1/week @ 2024-04-04 1/week @ 2024-04-18 3/week @ 2024-04-25 1/week @ 2024-05-02

每月227次下载

自定义许可

115KB
2K SLoC

logo

EO principles respected here We recommend IntelliJ IDEA

cargo crates.io PDD status codecov Hits-of-Code Lines of code License docs.rs

此Rust库为reo虚拟机实现EO程序的涌动对象图(SODG)。图是“涌动”的,因为它在幕后自动删除自身中的顶点和边,这也被称为“垃圾回收”机制。当一个顶点的内容被读取后立即被删除,并且没有其他顶点间接指向它。

以下是创建二分图的方法

use sodg::Sodg;
use sodg::Hex;
let mut g = Sodg::empty();
g.add(0)?; // add a vertex no.0
g.add(1)?; // add a vertex no.1
g.bind(0, 1, "foo")?; // connect v0 to v1 with label "foo"
g.put(1, Hex::from_str_bytes("Hello, world!"))?; // attach data to v1

然后,您可以通过从另一个顶点出发的边的标签找到顶点

let id = g.kid(0, "foo")?;
assert_eq!(1, id);

然后,您可以找到顶点的所有子顶点

let kids: Vec<(String, String, u32)> = g.kids(0);
assert_eq!("foo", kids[0].0);
assert_eq!("bar", kids[0].1);
assert_eq!(1, kids[0].2);

然后,您可以读取顶点的数据

let hex: Hex = g.data(1)?;
let num: i64 = hex.to_i64()?;
assert_eq!(42, num);

然后,您可以打印图

println!("{:?}", g);

使用merge(),您可以合并两个图,前提是它们是树。

使用save()load(),您可以序列化和反序列化图。

使用to_xml()to_dot(),您可以将其打印为XMLDOT

使用slice()slice_some(),您可以取图的某部分/切片(主要用于调试目的)。

阅读文档

如何贡献

首先,安装Rust然后

$ cargo test -vv

如果一切顺利,可以fork仓库,进行修改,然后向我们发送一个pull request。我们将审查您的修改,并在不久后将其应用到master分支上,前提是它们不违反我们的质量标准。为了避免挫败感,在发送pull request给我们之前,请再次运行cargo test。另外,请运行cargo fmtcargo clippy

依赖

~5–16MB
~179K SLoC