Skip to main content

faiss_next/index/
binary.rs

1use faiss_next_sys::{self, FaissIndexBinary};
2
3use crate::error::Result;
4use crate::index::native::InnerPtr;
5use crate::index::traits::BinaryIndex;
6
7pub struct IndexBinary {
8    inner: InnerPtr<FaissIndexBinary>,
9}
10
11impl IndexBinary {
12    pub fn from_raw(ptr: *mut FaissIndexBinary) -> Result<Self> {
13        Ok(Self {
14            inner: InnerPtr::new(ptr)?,
15        })
16    }
17}
18
19impl BinaryIndex for IndexBinary {
20    fn inner_ptr(&self) -> *mut FaissIndexBinary {
21        self.inner.as_ptr()
22    }
23}
24
25impl Drop for IndexBinary {
26    fn drop(&mut self) {
27        tracing::trace!("dropping IndexBinary");
28        unsafe {
29            faiss_next_sys::faiss_IndexBinary_free(self.inner.as_ptr());
30        }
31    }
32}
33
34unsafe impl Send for IndexBinary {}
35unsafe impl Sync for IndexBinary {}