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
235KB
3K SLoC
Treena
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(而不是你)存在错误。
- 例如,如果treena因为
许可证
许可协议如下
- Apache许可证第2版 (LICENSE-APACHE.txt 或 http://apache.ac.cn/licenses/LICENSE-2.0)
- MIT许可证 (LICENSE-MIT.txt 或 https://opensource.org/licenses/MIT)
任由您选择。
贡献
除非您明确表示,否则根据Apache-2.0许可证定义的,您有意提交的任何贡献,包括在您的工作中,均应按上述方式双重许可,没有任何额外的条款或条件。