roaring_bitmap 0.1.3

Roaring bitmap data structure implemented in Rust
Documentation
use std::vec;
#[derive(Clone)]
pub struct VecSet{
    data:   Vec<u16>,
    num:    usize,
}

impl VecSet{
    pub fn new() -> VecSet{
        return VecSet{
            data: Vec::new(),
            num: 0,
        };
    }

    pub fn add(&mut self, value: u16){
        let slot_index = self.get_slot_index(value);
        let store_value = self.get_store_value(value);
        if slot_index >= self.data.len(){
            self.data.resize(slot_index + 1, 0);
        }
        if (self.data[slot_index] & store_value) == 0{
            self.num = self.num + 1;
            self.data[slot_index] = self.data[slot_index] | store_value;
        }
    }

    pub fn remove(&mut self, value: u16){
        let slot_index = self.get_slot_index(value);
        let store_value = self.get_store_value(value);
        if slot_index < self.data.len(){
            if (self.data[slot_index] & store_value) > 0{
                self.num = self.num - 1;
                self.data[slot_index] = self.data[slot_index] & (0xFFFF ^ store_value);
            }
        }
    }

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

    fn get_store_value(&self, value: u16) -> u16{
        return 1<<(value & 0xF);
    }

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

    pub fn values(&self) -> Vec<u16>{
        let mut vec:Vec<u16> = Vec::new();
        for i in 0..self.data.len(){
            let mut val = self.data[i];
            let k = 1<<4;
            for j in 0..k{
                if val == 0{
                    break;
                }
                if (val & (1<<j)) > 0{
                    let store_value:u16 = ((i<<4) | j) as u16;
                    vec.push(store_value);
                    val = val & (0xFFFF ^ (1<<j));
                }
            }
        }
        return  vec;
    }
    
    pub fn clear(&mut self){
        self.data.clear();
        self.num = 0;
    }
}