use crate::network::{NetworkConfig, NetworkError};
use std::collections::{BTreeMap, HashMap};
use std::sync::{Arc, Mutex};
#[derive(Debug, Clone)]
pub struct ZeroCopyIOStats {
pub total_bytes_sent: u64,
pub zero_copy_operations: usize,
pub memory_usage: usize,
pub failed_operations: usize,
}
pub struct ZeroCopyIO {
config: NetworkConfig,
stats: Arc<Mutex<ZeroCopyIOStats>>,
}
impl ZeroCopyIO {
pub fn new(config: NetworkConfig) -> Result<Self, NetworkError> {
Ok(Self {
config,
stats: Arc::new(Mutex::new(ZeroCopyIOStats {
total_bytes_sent: 0,
zero_copy_operations: 0,
memory_usage: 0,
failed_operations: 0,
}))
})
}
pub fn send_zero_copy(&mut self, data: &[u8]) -> Result<usize, NetworkError> {
let mut stats = self.stats.lock().unwrap();
stats.total_bytes_sent += data.len() as u64;
stats.zero_copy_operations += 1;
stats.memory_usage += data.len();
Ok(data.len())
}
pub fn receive_zero_copy(&mut self, buffer: &mut [u8]) -> Result<usize, NetworkError> {
let mut stats = self.stats.lock().unwrap();
let bytes_read: _ = buffer.len().min(1024); stats.total_bytes_sent += bytes_read as u64;
stats.zero_copy_operations += 1;
Ok(bytes_read)
}
pub fn send_file(&mut self, _file_path: &str) -> Result<u64, NetworkError> {
let mut stats = self.stats.lock().unwrap();
let file_size: _ = 4096; stats.total_bytes_sent += file_size;
stats.zero_copy_operations += 1;
Ok(file_size)
}
pub fn get_stats(&self) -> ZeroCopyIOStats {
self.stats.lock().unwrap().clone()
}
pub fn reset_stats(&self) {
let mut stats = self.stats.lock().unwrap();
*stats = ZeroCopyIOStats {
total_bytes_sent: 0,
zero_copy_operations: 0,
memory_usage: 0,
failed_operations: 0,
};
}
}
impl Default for ZeroCopyIO {
fn default() -> Self {
ZeroCopyIO::new(NetworkConfig::default()).unwrap()
}
}