use std::io;
use consistent_hasher::{Identifier, LDB}; use std::time::Instant;
struct X {
pub x: usize,
}
impl X {
pub fn new(x: usize) -> Self {
Self { x }
}
}
impl Identifier for X {
fn identify(&self) -> usize {
self.x
}
}
fn main() {
let mut db = LDB::new(7,4); loop {
let mut input = String::new();
io::stdin().read_line(&mut input).expect("Failed to read line");
let input = input.trim();
if input == "q" {
break;
}
if let Some(stripped) = input.strip_prefix("n ") {
if let Ok(num) = stripped.trim().parse::<usize>() {
let result = db.add_node(X::new(num)); match result {
Ok(Some(transactions)) => {
println!("Added node {}. Transactions: ", num);
for (i, transaction) in transactions.iter().enumerate() {
println!("Transaction {}: {}", i + 1, transaction);
}
}
Ok(None) => println!("Node {} already exists.", num),
Err(e) => println!("Error: {:?}", e),
}
} else {
println!("Invalid node number.");
}
} else if let Some(stripped) = input.strip_prefix("d ") {
if let Ok(num) = stripped.trim().parse::<usize>() {
let result = db.delete_node(X::new(num)); match result {
Ok(Some(transactions)) => {
println!("Deleted node {}. Transactions: ", num, );
for (i, transaction) in transactions.iter().enumerate() {
println!("Transaction {}: {}", i + 1, transaction);
}
}
Ok(None) => (),
Err(e) => println!("Error: {:?}", e),
}
} else {
println!("Invalid node number.");
}
} else if let Some(stripped) = input.strip_prefix("vi ") {
if let Ok(num) = stripped.trim().parse::<usize>() {
let result = db.set_virtual_instances(num); match result {
Some(transactions) => {
for (i, transaction) in transactions.iter().enumerate() {
println!("Transaction {}: {}", i + 1, transaction);
}
}
None => println!("No change in virtual instances or invalid count."),
}
} else {
println!("Invalid number of virtual instances.");
}}
else if let Some(stripped) = input.strip_prefix("s ") {
if let Ok(num) = stripped.trim().parse::<String>(){
let result = db.key(&num); match result {
Ok((x,y)) => {
println!("go to :{x} with hash:{y}");
}
Err(e) => println!("Error:{}",e.to_string()),
}
} else {
println!("Invalid number of virtual instances.");
}}
else {
println!("Invalid command. Commands are:");
println!(" - n <node number> : Add node");
println!(" - d <node number> : Delete node");
println!(" - vi <count> : Set virtual instances");
}
db.print();
}
println!("Final state:");
db.print();
}