pub mod bitreader;
pub mod block;
pub mod block_scan;
pub mod bwt;
pub mod chunk;
pub mod huffman;
pub mod mtf;
pub mod parallel;
pub mod reader;
pub mod stream;
pub const BLOCK_MAGIC: u64 = 0x314159265359;
pub const FINAL_MAGIC: u64 = 0x177245385090;
use std::sync::OnceLock;
static POOL: OnceLock<rayon::ThreadPool> = OnceLock::new();
pub fn thread_pool() -> &'static rayon::ThreadPool {
POOL.get_or_init(|| {
let n = std::env::var("LBZIP2_THREADS")
.ok()
.and_then(|v| v.parse().ok())
.unwrap_or_else(|| {
std::thread::available_parallelism()
.map(|n| n.get())
.unwrap_or(4)
});
rayon::ThreadPoolBuilder::new()
.num_threads(n)
.thread_name(|i| format!("lbzip2-{i}"))
.build()
.expect("failed to create lbzip2 thread pool")
})
}