Fix a bit::Map overflow on 32 bit machines

This commit is contained in:
Thinkofname 2016-04-02 16:24:50 +01:00
parent 0cad9508aa
commit a3a0c02213
1 changed files with 2 additions and 2 deletions

View File

@ -78,9 +78,9 @@ impl Map {
pub fn set(&mut self, i: usize, val: usize) {
let i = i * self.bit_size;
let pos = i / 64;
let mask = (1 << self.bit_size) - 1;
let mask = (1u64 << self.bit_size) - 1;
let ii = i % 64;
self.bits[pos] = (self.bits[pos] & !(mask << ii)) | ((val << ii) as u64);
self.bits[pos] = (self.bits[pos] & !(mask << ii)) | ((val as u64) << ii);
let pos2 = (i + self.bit_size - 1) / 64;
if pos2 != pos {
let used = 64 - ii;