debra-common 0.1.1

Common types, traits and base functionality for the DEBRA reclamation scheme.
Documentation
use std::env;
use std::fs::File;
use std::io::Write;
use std::path::Path;

const INVALID_SIZE: usize = 0;
const DEFAULT_SIZE: usize = 256;
const MAX_SIZE: usize = 4096;

fn main() {
    println!("cargo:rerun-if-env-changed=DEBRA_EPOCH_CACHE_SIZE");

    let out_dir = env::var("OUT_DIR").expect("no out directory");
    let dest = Path::new(&out_dir).join("build_constants.rs");

    let mut file = File::create(&dest).expect("could not create file");

    let size: usize = option_env!("DEBRA_EPOCH_CACHE_SIZE")
        .map_or(Ok(DEFAULT_SIZE), str::parse)
        .expect("failed to parse env variable DEBRA_EPOCH_CACHE_SIZE");

    if size == INVALID_SIZE {
        panic!("invalid DEBRA_EPOCH_CACHE_SIZE value (0)");
    } else if size > MAX_SIZE {
        panic!("invalid DEBRA_EPOCH_CACHE_SIZE value (too large)");
    }

    write!(&mut file, "const DEBRA_EPOCH_CACHE_SIZE: usize = {};", size)
        .expect("could not write to file");
}