#[cfg(feature = "debug")]
use llkv_btree::{
BPlusTree,
codecs::{BigEndianIdCodec, BigEndianKeyCodec},
pager::MemPager64,
};
#[cfg(feature = "debug")]
use llkv_btree::traits::GraphvizExt;
#[cfg(feature = "debug")]
use rand::{
rngs::StdRng,
{SeedableRng, seq::SliceRandom},
};
#[cfg(feature = "debug")]
use std::{fs::File, io::Write};
#[cfg(feature = "debug")]
fn main() -> Result<(), Box<dyn std::error::Error>> {
let pager = MemPager64::default();
let tree =
BPlusTree::<_, BigEndianKeyCodec<u64>, BigEndianIdCodec<u64>>::create_empty(pager, None)?;
let mut rng = StdRng::seed_from_u64(1337);
let mut keys: Vec<u64> = (0..150).collect();
keys.shuffle(&mut rng);
println!("Inserting 150 random keys into the B+Tree...");
let items_to_insert: Vec<_> = keys
.iter()
.map(|k| (*k, format!("value_{}", k).into_bytes()))
.collect();
let owned_items: Vec<_> = items_to_insert
.iter()
.map(|(k, v)| (*k, v.as_slice()))
.collect();
tree.insert_many(&owned_items)?;
println!("Insertion complete.");
println!("Generating DOT file for visualization...");
let dot_string = tree.to_dot()?;
let mut file = File::create("large_tree.dot")?;
file.write_all(dot_string.as_bytes())?;
println!("\nSuccess! ✨");
println!("A file named 'large_tree.dot' has been created in your project directory.");
println!("Follow the instructions at the top of 'examples/visualize.rs' to view it.");
Ok(())
}
#[cfg(not(feature = "debug"))]
fn main() {
use std::io::Write as _;
let msg = "\n\
============================================================\n\
This example requires the `debug` feature.\n\
------------------------------------------------------------\n\
Try one of the following:\n\
cargo run --example visualize --features debug\n\
cargo build --examples --features debug\n\
============================================================\n\n";
let _ = std::io::stderr().write_all(msg.as_bytes());
std::process::exit(1);
}