#![allow(dead_code)]
pub struct VectorStorage {
data: Vec<f32>,
dimension: usize,
count: usize,
}
impl VectorStorage {
pub fn new(dimension: usize) -> Self {
Self {
data: Vec::new(),
dimension,
count: 0,
}
}
pub fn add(&mut self, vector: &[f32]) {
assert_eq!(vector.len(), self.dimension);
self.data.extend_from_slice(vector);
self.count += 1;
}
pub fn get(&self, idx: usize) -> &[f32] {
let start = idx * self.dimension;
let end = start + self.dimension;
&self.data[start..end]
}
pub fn len(&self) -> usize {
self.count
}
pub fn is_empty(&self) -> bool {
self.count == 0
}
pub fn reserve(&mut self, n: usize) {
self.data.reserve(n * self.dimension);
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_vector_storage() {
let mut storage = VectorStorage::new(3);
storage.add(&[1.0, 2.0, 3.0]);
storage.add(&[4.0, 5.0, 6.0]);
assert_eq!(storage.len(), 2);
assert_eq!(storage.get(0), &[1.0, 2.0, 3.0]);
assert_eq!(storage.get(1), &[4.0, 5.0, 6.0]);
}
}