roaring_bitmap 0.1.0

Roaring bitmap data structure implemented in Rust
use std::vec;
use crate::roaring_set::RoaringSet;
pub struct RoaringBitMap{
    vec_set:    Vec<RoaringSet>,
    num:        usize,
}
impl  RoaringBitMap {

    pub fn new() -> RoaringBitMap{
        return RoaringBitMap {
            vec_set: Vec::with_capacity(16),
            num: 0,
        };
    }

    pub fn add(& mut self, value: u32){
        let slot_index = self.get_slot_index(value);
        let store_val = self.get_store_val(value);
        if slot_index >= self.vec_set.len() {
            self.vec_set.resize(slot_index + 1, RoaringSet::new());
        }
        let old_len = self.vec_set[slot_index].len();
        self.vec_set[slot_index].add(store_val);
        if self.vec_set[slot_index].len() > old_len{
            self.num = self.num + 1;
        }
    }

    pub fn remove(& mut self, value: u32){
        let slot_index = self.get_slot_index(value);
        let store_val = self.get_store_val(value);
        if slot_index < self.vec_set.len() {
            let old_len = self.vec_set[slot_index].len();
            self.vec_set[slot_index].remove(store_val);
            if self.vec_set[slot_index].len() < old_len{
                self.num = self.num - 1;
            }
        }
    }

    fn get_slot_index(&self, value: u32) -> usize{
        return (value>>16) as usize;
    }

    fn get_store_val(&self, value: u32) -> u16{
        return (value & 0xFFFF) as u16;
    }

    pub fn values(&self) -> Vec<u32>{
        let mut vec:Vec<u32> = Vec::new();
        for i in 0..self.vec_set.len(){
            let set_values = self.vec_set[i].values();
            let prefix_val =  (i << 16) as u32;
            for store_val in set_values{
                vec.push(prefix_val | (store_val as u32));
            }
        }
        return  vec;
    }

    pub fn len(&self) -> usize{
        return  self.num;
    }

}