use crate::utils;
pub fn range_search(codes: &[u64], qcode: u64, radius: usize) -> Vec<usize> {
let mut answers = Vec::<usize>::with_capacity(1 << 10);
range_search_with_buf(codes, qcode, radius, &mut answers);
answers
}
pub fn range_search_with_buf(codes: &[u64], qcode: u64, radius: usize, answers: &mut Vec<usize>) {
answers.clear();
for i in 0..codes.len() {
let dist = utils::hamdist(codes[i], qcode);
if dist <= radius {
answers.push(i);
}
}
}
pub fn exhaustive_search(codes: &[u64], qcode: u64) -> Vec<(usize, usize)> {
let mut answers = Vec::<(usize, usize)>::new();
exhaustive_search_with_buf(codes, qcode, &mut answers);
answers
}
pub fn exhaustive_search_with_buf(codes: &[u64], qcode: u64, answers: &mut Vec<(usize, usize)>) {
answers.resize(codes.len(), Default::default());
for i in 0..codes.len() {
let dist = utils::hamdist(codes[i], qcode);
answers[i] = (i, dist);
}
}