1 // Copyright 2015 The Rust Project Developers. See the COPYRIGHT
2 // file at the top-level directory of this distribution and at
3 // http://rust-lang.org/COPYRIGHT.
5 // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
6 // http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7 // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
8 // option. This file may not be copied, modified, or distributed
9 // except according to those terms.
13 /// A very simple BitVector type.
14 pub struct BitVector
{
19 pub fn new(num_bits
: usize) -> BitVector
{
20 let num_words
= (num_bits
+ 63) / 64;
21 BitVector { data: iter::repeat(0).take(num_words).collect() }
24 fn word_mask(&self, bit
: usize) -> (usize, u64) {
26 let mask
= 1 << (bit
% 64);
30 pub fn contains(&self, bit
: usize) -> bool
{
31 let (word
, mask
) = self.word_mask(bit
);
32 (self.data
[word
] & mask
) != 0
35 pub fn insert(&mut self, bit
: usize) -> bool
{
36 let (word
, mask
) = self.word_mask(bit
);
37 let data
= &mut self.data
[word
];
40 (value
| mask
) != value