use gzb_binary_69::Reader;
use flume::bounded as FlumeBounded;
use flume::Receiver as FlumeReveiver;
use flume::Sender as FlumeSender;
use crate::workers::{Signal,Pointer};
use std::sync::Arc;
use tokio::sync::{Mutex};
#[derive(Clone,Debug)]
pub struct Config{
pub files:Vec<String>,
pub min_que_size:u64,
pub expand_size:u64,
pub num_of_writers:u8
}
impl Config{
pub fn new(files:Vec<String>,min_que_size:u64,expand_size:u64,num_of_writers:u8)->Config{
Config{
files:files,
min_que_size:min_que_size,
expand_size:expand_size,
num_of_writers:num_of_writers
}
}
}
pub struct DiskGetMessage{
pub item_index:u64,
pub map_index:u8,
pub value_boundry:(usize,usize), pub signal:Arc<Mutex<Signal>>
}
pub struct DiskAddMessage{
pub start_at:u64,
pub value:Vec<u8>,
pub signal:Arc<Mutex<Signal>>
}
pub struct DiskRemoveMessage{
pub boundry:(usize,usize), pub signal:Arc<Mutex<Signal>>
}
pub enum DiskMessage{
Expand(Arc<Mutex<Signal>>),
Add(DiskAddMessage),
Get(DiskGetMessage),
Remove(DiskRemoveMessage)
}
#[derive(Clone)]
pub struct DiskConfig{
pub receiver:FlumeReveiver<DiskMessage>,
pub path:String,
pub frame_size:u64
}
impl DiskConfig{
pub fn new(p:String,frame_size:u64,receiver:FlumeReveiver<DiskMessage>)->DiskConfig{
return DiskConfig{
receiver:receiver,
path:p,
frame_size:frame_size
};
}
}
pub struct MapAddMessage{
pub index:u64,
pub value:Vec<u8>,
pub signal:Arc<Mutex<Signal>>
}
pub struct MapGetMessage{
pub index:u64,
pub signal:Arc<Mutex<Signal>>,
}
pub struct MapRemoveMessage{
pub pointer:Pointer,
pub signal:Arc<Mutex<Signal>>
}
pub enum MapMessage{
Get(MapGetMessage),
Add(MapAddMessage),
Remove(MapRemoveMessage)
}
pub struct LocatorNext{
pub signal:Arc<Mutex<Signal>>
}
pub struct LocatorAdd{
pub value:Vec<u8>,
pub signal:Arc<Mutex<Signal>>
}
pub struct LocatorReset{
pub pointer:Pointer,
pub signal:Arc<Mutex<Signal>>
}
pub struct LocatorRemove{
pub pointer:Pointer,
pub signal:Arc<Mutex<Signal>>
}
pub enum LocatorMessage{
Next(LocatorNext),
Add(LocatorAdd),
Reset(LocatorReset),
Remove(LocatorRemove)
}
pub struct MapConfig{
pub map_index:u8,
pub file_path:String,
pub locator_sender:FlumeSender<LocatorMessage>,
pub receiver:FlumeReveiver<MapMessage>,
pub reader:Reader,
pub num_of_writers:u8,
pub min_que_size:u64,
pub expand_size:u64,
}
impl MapConfig{
pub fn new(
map_index:u8,
file_path:String,
reader:Reader,
locator_sender:FlumeSender<LocatorMessage>,
num_of_writers:u8,
min_que_size:u64,
expand_size:u64,
)->(MapConfig,FlumeSender<MapMessage>){
let (sender, receiver) = FlumeBounded(5000);
return (
MapConfig{
map_index:map_index,
file_path:file_path,
reader:reader,
receiver:receiver,
locator_sender:locator_sender,
num_of_writers:num_of_writers,
min_que_size:min_que_size,
expand_size:expand_size
},
sender
);
}
}