pub fn int64_hash_inverse(key_arg : u64)  -> u64 {
    let mut key = key_arg;
    //
    // Invert key = key + (key << 31)
    let mut tmp : u64 = key.wrapping_sub(key << 31);
    //
    key = key.wrapping_sub(tmp << 31);
    // Invert key = key ^ (key >> 28)
    tmp = key ^ key >> 28;
    key = key ^ tmp >> 28;
    // Invert key *= 21
    key = key.wrapping_mul(14933078535860113213u64);
    // Invert key = key ^ (key >> 14)
    tmp = key ^ key >> 14;
    tmp = key ^ tmp >> 14;
    tmp = key ^ tmp >> 14;
    key = key ^ tmp >> 14;
    // Invert key *= 265
    key = key.wrapping_mul(15244667743933553977u64);
    // Invert key = key ^ (key >> 24)
    tmp = key ^ key >> 24;
    key = key ^ tmp >> 24;
    // Invert key = (~key) + (key << 21)
    tmp = !key;
    tmp = !(key.wrapping_sub(tmp << 21));
    tmp = !(key.wrapping_sub(tmp << 21));
    key = !(key.wrapping_sub(tmp << 21));
    return key;
}
/// The inversion of int64_hash. 
// Modified from <https://naml.us/blog/tag/invertible>
The inversion of int64_hash.
Modified from
The inversion of int64_hash . Modified from
pub fn int64_hash_inverse(key_arg : u64)  -> u64 {
    let mut key = key_arg;
    //
    // Invert key = key + (key << 31)
    let mut tmp : u64 = key.wrapping_sub(key << 31);
    //
    key = key.wrapping_sub(tmp << 31);
    // Invert key = key ^ (key >> 28)
    tmp = key ^ key >> 28;
    key = key ^ tmp >> 28;
    // Invert key *= 21
    key = key.wrapping_mul(14933078535860113213u64);
    // Invert key = key ^ (key >> 14)
    tmp = key ^ key >> 14;
    tmp = key ^ tmp >> 14;
    tmp = key ^ tmp >> 14;
    key = key ^ tmp >> 14;
    // Invert key *= 265
    key = key.wrapping_mul(15244667743933553977u64);
    // Invert key = key ^ (key >> 24)
    tmp = key ^ key >> 24;
    key = key ^ tmp >> 24;
    // Invert key = (~key) + (key << 21)
    tmp = !key;
    tmp = !(key.wrapping_sub(tmp << 21));
    tmp = !(key.wrapping_sub(tmp << 21));
    key = !(key.wrapping_sub(tmp << 21));
    return key;
}
pub fn int64_hash_inverse ( key_arg : u64 ) -> u64 { let mut key = key_arg ; // // Invert key = key + (key << 31) let mut tmp : u64 = key . wrapping_sub ( key << 31 ) ; // key = key . wrapping_sub ( tmp << 31 ) ; // Invert key = key ^ (key >> 28) tmp = key ^ key >> 28 ; key = key ^ tmp >> 28 ; // Invert key *= 21 key = key . wrapping_mul ( 14933078535860113213u64 ) ; // Invert key = key ^ (key >> 14) tmp = key ^ key >> 14 ; tmp = key ^ tmp >> 14 ; tmp = key ^ tmp >> 14 ; key = key ^ tmp >> 14 ; // Invert key *= 265 key = key . wrapping_mul ( 15244667743933553977u64 ) ; // Invert key = key ^ (key >> 24) tmp = key ^ key >> 24 ; key = key ^ tmp >> 24 ; // Invert key = (~key) + (key << 21) tmp = ! key ; tmp = ! ( key . wrapping_sub ( tmp << 21 ) ) ; tmp = ! ( key . wrapping_sub ( tmp << 21 ) ) ; key = ! ( key . wrapping_sub ( tmp << 21 ) ) ; return key ; }
The inversion of int64_hash.
The inversion of int64_hash .
key_arg
u64