5次发布

0.0.5 2022年3月14日
0.0.4 2021年11月16日
0.0.3 2021年11月11日
0.0.2 2021年10月14日
0.0.1 2021年9月26日

#1704 in Data structures

MIT/Apache

235KB
3K SLoC

Treena

Build Status Latest version Documentation Minimum supported rustc version: 1.56

Treena:存储在竞技场的树。

另一个竞技场树吗?

Treena大大受到了 indextree 库的启发,但还有额外的目标。

  • 提供一个竞技场来包含多个独立的树。
    • 即使用户正在操作单个树,他们可能也想创建临时树。森林支持此类用例。
    • Treena提供的森林是一个真正的森林:竞技场中的树根节点之间没有兄弟姐妹关系。
  • 使用清晰且无歧义的名字。
    • 传统的函数名称,通常用于树操作,对于非英语母语者来说非常不清楚。
      • 例如,A.insert_before(B)是什么意思?是“在B之前插入A”还是“在A之前插入B”?
      • P.insert_before(A, B)可以相对自然地解读为:“P(父节点)在节点B之前插入节点A”。然而,这里的P是完全多余的,因为它必须是A的父节点。
    • Treena将这些函数提供为A.adopt(B, AsFoo)forest.insert(A, AsFooOf(B))。它们比传统的名称更清晰。
      • 例如,A.adopt(B, AdoptAs::LastChild)可以读作:“节点A将节点B作为A的最后子节点接受。”
      • 另一个例子:forest.insert(A, InsertAs::NextSiblingOf(B))可以读作:“将节点A插入到节点B的下一个兄弟节点处。”
  • 确保安全且易于调试。
    • 没有不安全的代码(至少目前没有)。这意味着该软件包不会遇到未定义的行为。
    • 在代码中到处使用 .expect(),当它不会失败或由于某种原因应该恐慌时,要有有意义的消息。
      • 例如,如果treena因为 [precondition] 节点必须处于活动状态 而恐慌,你立即可以意识到传递的节点不处于活动状态,但违反了函数的先决条件。
      • 另一个例子:如果treena因为 [consistency] foobarbaz 而恐慌,这肯定是因为treena(而不是你)存在错误。

许可证

许可协议如下

任由您选择。

贡献

除非您明确表示,否则根据Apache-2.0许可证定义的,您有意提交的任何贡献,包括在您的工作中,均应按上述方式双重许可,没有任何额外的条款或条件。

没有运行时依赖

功能