Documentation
use roaring::RoaringTreemap;

pub fn merge<S: AsRef<str>>(li: impl IntoIterator<Item = S>, skip_li: &RoaringTreemap) -> Vec<u8> {
  let mut txt = vec![];
  for (pos, s) in li.into_iter().enumerate() {
    if skip_li.contains(pos as u64) {
      txt.push(0);
    } else {
      txt.extend(s.as_ref().as_bytes());
    }
  }
  txt
}

pub fn split<T: AsRef<[u8]>>(bin: T) -> Vec<String> {
  let bin = bin.as_ref();
  let mut li = vec![];
  let mut pre = 0;

  for (i, byte) in bin.iter().enumerate() {
    if *byte == 0 {
      if pre < i {
        li.push(String::from_utf8_lossy(&bin[pre..i]).into());
      }
      li.push(String::new());
      pre = i + 1;
    }
  }

  if pre < bin.len() {
    li.push(String::from_utf8_lossy(&bin[pre..]).into());
  }

  li
}