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 内存管理
每月227次下载
115KB
2K SLoC
此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()
,您可以将其打印为XML和DOT。
使用slice()
和slice_some()
,您可以取图的某部分/切片(主要用于调试目的)。
阅读文档。
如何贡献
首先,安装Rust然后
$ cargo test -vv
如果一切顺利,可以fork仓库,进行修改,然后向我们发送一个pull request。我们将审查您的修改,并在不久后将其应用到master
分支上,前提是它们不违反我们的质量标准。为了避免挫败感,在发送pull request给我们之前,请再次运行cargo test
。另外,请运行cargo fmt
和cargo clippy
。
依赖
~5–16MB
~179K SLoC