Skip to main content

faiss_next/
distance.rs

1use faiss_next_sys::{self, FaissDistanceComputer};
2
3use crate::error::{check_return_code, Result};
4
5#[allow(dead_code)]
6pub struct DistanceComputer {
7    ptr: *mut FaissDistanceComputer,
8}
9
10impl DistanceComputer {
11    #[allow(dead_code)]
12    pub(crate) fn new(ptr: *mut FaissDistanceComputer) -> Self {
13        Self { ptr }
14    }
15
16    pub fn set_query(&mut self, x: &[f32]) -> Result<()> {
17        check_return_code(unsafe {
18            faiss_next_sys::faiss_DistanceComputer_set_query(self.ptr, x.as_ptr())
19        })
20    }
21
22    pub fn symmetric_dis(&self, i: i64, j: i64) -> Result<f32> {
23        let mut dis = 0.0f32;
24        check_return_code(unsafe {
25            faiss_next_sys::faiss_DistanceComputer_symmetric_dis(self.ptr, i, j, &mut dis)
26        })?;
27        Ok(dis)
28    }
29
30    pub fn vector_to_query_dis(&self, i: i64) -> Result<f32> {
31        let mut dis = 0.0f32;
32        check_return_code(unsafe {
33            faiss_next_sys::faiss_DistanceComputer_vector_to_query_dis(self.ptr, i, &mut dis)
34        })?;
35        Ok(dis)
36    }
37}
38
39impl Drop for DistanceComputer {
40    fn drop(&mut self) {
41        if !self.ptr.is_null() {
42            unsafe {
43                faiss_next_sys::faiss_DistanceComputer_free(self.ptr);
44            }
45        }
46    }
47}