1pub mod arena;
2pub mod buddy;
3
4pub mod pretty_print {
5 use std::ops::Range;
6
7 use generational_arena::{Arena, Index};
8
9 use crate::{
10 arena::BuddyBookkeeping,
11 buddy::{Block, BlockState},
12 };
13
14 #[derive(Debug)]
15 pub enum PrettyState {
16 Split(Box<PrettyBlock>, Box<PrettyBlock>),
17 Available,
18 Occupied,
19 }
20
21 #[derive(Debug)]
22 pub struct PrettyBlock {
23 pub range: Range<usize>,
24 pub state: PrettyState,
25 }
26
27 pub fn prettify(arena: &BuddyBookkeeping) -> PrettyBlock {
28 fn build(arena: &Arena<Block>, current: Index) -> PrettyBlock {
29 PrettyBlock {
30 range: arena[current].range.clone(),
31 state: match arena[current].state {
32 BlockState::Available => PrettyState::Available,
33 BlockState::Occupied => PrettyState::Occupied,
34 BlockState::Split(first, second) => PrettyState::Split(
35 Box::new(build(arena, first)),
36 Box::new(build(arena, second)),
37 ),
38 },
39 }
40 }
41
42 build(&arena.blocks, arena.root)
43 }
44}