hipvs/ivf_flat/
search_params.rs1use crate::error::{check_cuvs, Result};
18use std::fmt;
19use std::io::{stderr, Write};
20
21pub struct SearchParams(pub ffi::cuvsIvfFlatSearchParams_t);
23
24impl SearchParams {
25 pub fn new() -> Result<SearchParams> {
27 unsafe {
28 let mut params = std::mem::MaybeUninit::<ffi::cuvsIvfFlatSearchParams_t>::uninit();
29 check_cuvs(ffi::cuvsIvfFlatSearchParamsCreate(params.as_mut_ptr()))?;
30 Ok(SearchParams(params.assume_init()))
31 }
32 }
33
34 pub fn set_n_probes(self, n_probes: u32) -> SearchParams {
36 unsafe {
37 (*self.0).n_probes = n_probes;
38 }
39 self
40 }
41}
42
43impl fmt::Debug for SearchParams {
44 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
45 write!(f, "SearchParams {{ params: {:?} }}", unsafe { *self.0 })
48 }
49}
50
51impl Drop for SearchParams {
52 fn drop(&mut self) {
53 if let Err(e) = check_cuvs(unsafe { ffi::cuvsIvfFlatSearchParamsDestroy(self.0) }) {
54 write!(
55 stderr(),
56 "failed to call cuvsIvfFlatSearchParamsDestroy {:?}",
57 e
58 )
59 .expect("failed to write to stderr");
60 }
61 }
62}
63
64#[cfg(test)]
65mod tests {
66 use super::*;
67
68 #[test]
69 fn test_search_params() {
70 let params = SearchParams::new().unwrap().set_n_probes(128);
71
72 unsafe {
73 assert_eq!((*params.0).n_probes, 128);
74 }
75 }
76}