#arena #object #immutability #reference #cyclic #instance #immutable-once-built

immutable_arena

一个用于不可变且可能包含循环引用的对象的竞技场

2个版本

使用旧的Rust 2015

0.1.1 2016年6月17日
0.1.0 2016年6月17日

#14 in #cyclic

MIT 许可证

9KB
153

immutable_arena:一个用于具有循环引用的不可变构建对象的竞技场

Build Status

crates.io

文档

本包实现了一个竞技场,用于创建一旦构建就不可变的对象,除了对竞技场中其他对象的引用。用户在分配时创建对象一次,然后对象存在之后,可以设置特殊智能指针(Ref实例)到竞技场中的其他对象恰好一次。之后,这些对象将完全不可变。

示例用法

use immutable_arena::{Arena, Ref};

struct S<'arena> {
    id: u32,
    next: Ref<'arena, S<'arena>>,
}

fn alloc_cycle<'arena>(arena: &'arena Arena<S<'arena>>)
    -> &'arena S<'arena> {
    let s1 = arena.alloc(S { id: 1, next: Ref::empty() });
    let s2 = arena.alloc(S { id: 2, next: Ref::empty() });
    s1.next.set(s2);
    s2.next.set(s1);
    s1
}

fn test_cycle() {
    let arena = Arena::new();
    let s1 = alloc_cycle(&arena);
    assert!(s1.next.next.id == s1.id);
}

immutable_arena版权所有(c)2016年Chris Fallin <[email protected]>,并发布在MIT许可证下。有关详细信息,请参阅LICENSE文件。

依赖关系

~36KB