rust-algorithms 0.1.0

A rust-algorithms library
Documentation
pub fn spread(x: u32) -> u64 {
    let mut ans = x as u64;
    ans = (ans | (ans << 16)) & 0x0000ffff0000ffff;
    ans = (ans | (ans << 8)) & 0x00ff00ff00ff00ff;
    ans = (ans | (ans << 4)) & 0x0f0f0f0f0f0f0f0f;
    ans = (ans | (ans << 2)) & 0x3333333333333333;
    ans = (ans | (ans << 1)) & 0x5555555555555555;
    ans
}

pub fn interleave(lat: u32, lng: u32) -> u64 {
    spread(lat) | (spread(lng) << 1)
}

pub fn quantize(lat: f64, base: f64) -> u32 {
    ((lat*base + 1.5).to_bits() >> 20) as u32
}

pub fn encode(lat: f64, lng: f64) -> u64 {
    interleave(quantize(lat, 0.005555555555555556), quantize(lng, 0.002777777777777778))
}