faiss-next 0.6.0

Rust bindings for Faiss (Facebook AI Similarity Search)
Documentation
use faiss_next_sys::{self, FaissDistanceComputer};

use crate::error::{check_return_code, Result};

#[allow(dead_code)]
pub struct DistanceComputer {
    ptr: *mut FaissDistanceComputer,
}

impl DistanceComputer {
    #[allow(dead_code)]
    pub(crate) fn new(ptr: *mut FaissDistanceComputer) -> Self {
        Self { ptr }
    }

    pub fn set_query(&mut self, x: &[f32]) -> Result<()> {
        check_return_code(unsafe {
            faiss_next_sys::faiss_DistanceComputer_set_query(self.ptr, x.as_ptr())
        })
    }

    pub fn symmetric_dis(&self, i: i64, j: i64) -> Result<f32> {
        let mut dis = 0.0f32;
        check_return_code(unsafe {
            faiss_next_sys::faiss_DistanceComputer_symmetric_dis(self.ptr, i, j, &mut dis)
        })?;
        Ok(dis)
    }

    pub fn vector_to_query_dis(&self, i: i64) -> Result<f32> {
        let mut dis = 0.0f32;
        check_return_code(unsafe {
            faiss_next_sys::faiss_DistanceComputer_vector_to_query_dis(self.ptr, i, &mut dis)
        })?;
        Ok(dis)
    }
}

impl Drop for DistanceComputer {
    fn drop(&mut self) {
        if !self.ptr.is_null() {
            unsafe {
                faiss_next_sys::faiss_DistanceComputer_free(self.ptr);
            }
        }
    }
}