Define nicer Rust tree type and coerce

This commit is contained in:
George Thomas 2026-02-19 21:11:23 +00:00
parent 55a781eeb8
commit 261acca8a4

View File

@ -42,7 +42,20 @@ extern "C" fn add(a: i64, b: i64) -> i64 {
}
#[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 {
Leaf {
value: i64,
@ -55,8 +68,5 @@ enum BTree {
#[unsafe(no_mangle)]
extern "C" fn sum_tree(t: BTree) -> i64 {
match t {
BTree::Leaf { value } => value,
BTree::Fork { left, right } => unsafe { sum_tree(*left) + sum_tree(*right) },
}
(unsafe { std::mem::transmute::<_, &BTreeBox>(&t) }).sum()
}