diskann_quantization/bits/
length.rs1pub use sealed::Length;
7
8#[derive(Debug, Clone, Copy)]
10pub struct Dynamic(pub usize);
11
12impl From<usize> for Dynamic {
14 fn from(value: usize) -> Dynamic {
15 Dynamic(value)
16 }
17}
18
19#[derive(Debug, Clone, Copy)]
21pub struct Static<const N: usize>;
22
23unsafe impl Length for Dynamic {
25 #[inline(always)]
26 fn value(self) -> usize {
27 self.0
28 }
29}
30
31unsafe impl<const N: usize> Length for Static<N> {
33 #[inline(always)]
34 fn value(self) -> usize {
35 N
36 }
37}
38
39mod sealed {
40 pub unsafe trait Length: Copy {
49 fn value(self) -> usize;
50 }
51}
52
53#[cfg(test)]
54mod tests {
55 use super::*;
56
57 #[test]
58 fn test_length() {
59 for i in 0..100 {
60 assert_eq!(Dynamic(i).value(), i);
61 }
62
63 assert_eq!(Static::<0>.value(), 0);
64 assert_eq!(Static::<10>.value(), 10);
65 assert_eq!(Static::<20>.value(), 20);
66 assert_eq!(Static::<37>.value(), 37);
67 }
68}