#![allow(dead_code)]
use std::fs::File;
use std::io::{BufReader, Read};
use std::path::Path;
pub fn read_fvecs<P: AsRef<Path>>(path: P) -> std::io::Result<Vec<Vec<f32>>> {
let mut file = BufReader::new(File::open(path)?);
let mut results = Vec::new();
let mut d_buf = [0u8; 4];
loop {
if let Err(e) = file.read_exact(&mut d_buf) {
if e.kind() == std::io::ErrorKind::UnexpectedEof {
break;
} else {
return Err(e);
}
}
let d = i32::from_le_bytes(d_buf) as usize;
let mut vector_buf = vec![0u8; d * 4];
file.read_exact(&mut vector_buf)?;
let mut vector = Vec::with_capacity(d);
for i in 0..d {
let val_bytes = [
vector_buf[i * 4],
vector_buf[i * 4 + 1],
vector_buf[i * 4 + 2],
vector_buf[i * 4 + 3],
];
vector.push(f32::from_le_bytes(val_bytes));
}
results.push(vector);
}
Ok(results)
}
pub fn read_ivecs<P: AsRef<Path>>(path: P) -> std::io::Result<Vec<Vec<usize>>> {
let mut file = BufReader::new(File::open(path)?);
let mut results = Vec::new();
let mut d_buf = [0u8; 4];
loop {
if let Err(e) = file.read_exact(&mut d_buf) {
if e.kind() == std::io::ErrorKind::UnexpectedEof {
break;
} else {
return Err(e);
}
}
let d = i32::from_le_bytes(d_buf) as usize;
let mut vector_buf = vec![0u8; d * 4];
file.read_exact(&mut vector_buf)?;
let mut vector = Vec::with_capacity(d);
for i in 0..d {
let val_bytes = [
vector_buf[i * 4],
vector_buf[i * 4 + 1],
vector_buf[i * 4 + 2],
vector_buf[i * 4 + 3],
];
let val = i32::from_le_bytes(val_bytes) as usize;
vector.push(val);
}
results.push(vector);
}
Ok(results)
}