Skip to main content

chroma_types/
quantized_cluster.rs

1use std::mem::size_of_val;
2
3#[derive(Clone, Debug)]
4pub struct QuantizedCluster<'data> {
5    pub center: &'data [f32],
6    pub codes: &'data [u8],
7    pub ids: &'data [u32],
8    pub versions: &'data [u32],
9}
10
11impl QuantizedCluster<'_> {
12    pub fn compute_size(&self) -> usize {
13        size_of_val(self.center)
14            + size_of_val(self.codes)
15            + size_of_val(self.ids)
16            + size_of_val(self.versions)
17    }
18}
19
20#[derive(Clone, Debug)]
21pub struct QuantizedClusterOwned {
22    pub center: Vec<f32>,
23    pub codes: Vec<u8>,
24    pub ids: Vec<u32>,
25    pub versions: Vec<u32>,
26}
27
28impl From<QuantizedCluster<'_>> for QuantizedClusterOwned {
29    fn from(value: QuantizedCluster<'_>) -> Self {
30        Self {
31            center: value.center.to_vec(),
32            codes: value.codes.to_vec(),
33            ids: value.ids.to_vec(),
34            versions: value.versions.to_vec(),
35        }
36    }
37}
38
39impl<'data> From<&'data QuantizedClusterOwned> for QuantizedCluster<'data> {
40    fn from(value: &'data QuantizedClusterOwned) -> Self {
41        Self {
42            center: &value.center,
43            codes: &value.codes,
44            ids: &value.ids,
45            versions: &value.versions,
46        }
47    }
48}