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}