Macro moore_common::node_storage [−][src]
macro_rules! node_storage {
($name : ident < $($lt : tt), + > :
$($node_name : ident : $node_ref : ty => $node : ty,) +) => { ... };
($name : ident < $($lt : tt), + > where($($wh : tt) +) :
$($node_name : ident : $node_ref : ty => $node : ty,) +) => { ... };
(STRUCT_IMPL $name : ident ; $($lt : tt), + ;
$($node_name : ident, $node_ref : ty, $node : ty ;) *) => { ... };
(TRAIT_IMPL $name : ident ; $($lt : tt), + ; $node_name : ident, $node_ref :
ty, $node : ty ; $($tail_name : ident, $tail_ref : ty, $tail : ty ;) *) => { ... };
(TRAIT_IMPL $name : ident ; $($lt : tt), * ;) => { ... };
}Expand description
Create a new table that implements the NodeStorage trait.
The resulting table can then be used to store nodes in a type safe manner.
Example
#[macro_use]
extern crate moore_common;
use moore_common::score::NodeStorage;
#[derive(PartialEq, Eq, Hash, Debug)]
struct FooRef(usize);
#[derive(PartialEq, Eq, Hash, Debug)]
struct BarRef(usize);
#[derive(PartialEq, Eq, Debug)]
struct Foo;
#[derive(PartialEq, Eq, Debug)]
struct Bar;
node_storage!(NodeTable<'tn>:
foos: FooRef => &'tn Foo,
bars: BarRef => &'tn Bar,
);
let foo = &Foo;
let bar = &Bar;
let mut tbl = NodeTable::new();
tbl.set(FooRef(0), foo);
tbl.set(BarRef(1), bar);
assert_eq!(tbl.get(&FooRef(0)), Some(&foo));
assert_eq!(tbl.get(&BarRef(1)), Some(&bar));
// The following would produce a compiler error due to the type mismatch:
// assert_eq!(tbl.get(&BarRef(0)), Some(&foo));
// assert_eq!(tbl.get(&FooRef(1)), Some(&bar));