Define nicer Rust tree type and coerce
This commit is contained in:
parent
55a781eeb8
commit
261acca8a4
20
rust/lib.rs
20
rust/lib.rs
@ -42,7 +42,20 @@ extern "C" fn add(a: i64, b: i64) -> i64 {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[repr(C)]
|
#[repr(C)]
|
||||||
#[derive(Clone, Copy)]
|
enum BTreeBox {
|
||||||
|
Leaf { value: i64 },
|
||||||
|
Fork { left: Box<BTreeBox>, right: Box<BTreeBox> },
|
||||||
|
}
|
||||||
|
impl BTreeBox {
|
||||||
|
fn sum(&self) -> i64 {
|
||||||
|
match self {
|
||||||
|
BTreeBox::Leaf { value } => *value,
|
||||||
|
BTreeBox::Fork { left, right } => left.sum() + right.sum(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[repr(C)]
|
||||||
enum BTree {
|
enum BTree {
|
||||||
Leaf {
|
Leaf {
|
||||||
value: i64,
|
value: i64,
|
||||||
@ -55,8 +68,5 @@ enum BTree {
|
|||||||
|
|
||||||
#[unsafe(no_mangle)]
|
#[unsafe(no_mangle)]
|
||||||
extern "C" fn sum_tree(t: BTree) -> i64 {
|
extern "C" fn sum_tree(t: BTree) -> i64 {
|
||||||
match t {
|
(unsafe { std::mem::transmute::<_, &BTreeBox>(&t) }).sum()
|
||||||
BTree::Leaf { value } => value,
|
|
||||||
BTree::Fork { left, right } => unsafe { sum_tree(*left) + sum_tree(*right) },
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user