use bblock::{BBlockAllocator, BXorBlockAllocator};
use bstack::{BStack, BStackAllocator, BStackGuardedSlice, LinearBStackAllocator};
use std::io;
fn main() -> io::Result<()> {
crc_guarded()?;
println!();
xor_guarded()?;
Ok(())
}
fn crc_guarded() -> io::Result<()> {
println!("=== BBlock via BStackGuardedSlice (CRC32) ===");
let stack = BStack::open("guarded_crc.bstack")?;
let alloc = BBlockAllocator::new(LinearBStackAllocator::new(stack));
let block = alloc.alloc(16)?;
block.write(b"hello, guarded!!")?;
println!(
"After write: {:?}",
String::from_utf8_lossy(block.view().read()?.as_slice())
);
println!("Checksum valid: {}", block.verify()?);
let data_slice = block.as_slice()?;
println!(
"as_slice len: {} bytes (block.len() = {}, raw len = {})",
data_slice.len(),
block.len(),
unsafe { block.into_slice() }.len(),
);
let block = alloc.alloc(16)?;
block.write(b"hello, guarded!!")?;
block.zero()?;
println!("After zero: {:?}", block.view().read()?);
println!("Checksum valid: {}", block.verify()?);
Ok(())
}
fn xor_guarded() -> io::Result<()> {
println!("=== BXorBlock via BStackGuardedSlice (XOR, incremental) ===");
let stack = BStack::open("guarded_xor.bstack")?;
let alloc = BXorBlockAllocator::new(LinearBStackAllocator::new(stack));
let block = alloc.alloc(16)?;
block.write(b"hello, guarded!!")?;
println!(
"After write: {:?}",
String::from_utf8_lossy(block.view().read()?.as_slice())
);
println!("Checksum valid: {}", block.verify()?);
block.write(b"world, guarded!!")?;
println!(
"After overwrite:{:?}",
String::from_utf8_lossy(block.view().read()?.as_slice())
);
println!("Checksum valid: {}", block.verify()?);
let data_slice = block.as_slice()?;
println!(
"as_slice len: {} bytes (block.len() = {})",
data_slice.len(),
block.len(),
);
block.zero()?;
println!("After zero: {:?}", block.view().read()?);
println!("Checksum valid: {}", block.verify()?);
Ok(())
}