diff --git a/gg-g_counter/src/main.rs b/gg-g_counter/src/main.rs index b526f55..acd6d2d 100644 --- a/gg-g_counter/src/main.rs +++ b/gg-g_counter/src/main.rs @@ -1,4 +1,7 @@ -use std::sync::{Arc, Mutex}; +use std::{ + rc::Rc, + sync::{Arc, Mutex}, +}; use nebkor_maelstrom::{mk_payload, mk_stdin, Body, Message, Node, Runner}; @@ -6,7 +9,7 @@ fn main() { let node = Counter; let node = Arc::new(Mutex::new(node)); - let runner = Runner::new(node); + let runner = Rc::new(Runner::new(node)); let (i, _, rx) = mk_stdin(); @@ -33,7 +36,7 @@ const KEY: &str = "COUNTER"; struct Counter; impl Node for Counter { - fn handle<'slf>(&'slf mut self, runner: &'slf Runner, req: Message) { + fn handle<'slf>(&'slf mut self, runner: &'slf Rc, req: Message) { let typ = req.body.typ.as_str(); let frm = req.src.clone(); let msg_id = req.body.msg_id.to_owned(); diff --git a/nebkor-maelstrom/src/lib.rs b/nebkor-maelstrom/src/lib.rs index 7de0141..2b45ebc 100644 --- a/nebkor-maelstrom/src/lib.rs +++ b/nebkor-maelstrom/src/lib.rs @@ -1,6 +1,7 @@ use std::{ collections::HashMap, io::{BufRead, Stdout, Write}, + rc::Rc, sync::{ atomic::{AtomicU64, AtomicUsize, Ordering}, mpsc::{channel, Receiver, Sender}, @@ -26,7 +27,7 @@ static MSG_ID: AtomicU64 = AtomicU64::new(0); static OUTPUT: LazyLock = LazyLock::new(std::io::stdout); pub trait Node { - fn handle(&mut self, runner: &Runner, msg: Message); + fn handle(&mut self, runner: &Rc, msg: Message); } #[derive(Clone)] @@ -49,7 +50,7 @@ impl Runner { } } - pub fn run(&self, input: Receiver, on_init: Option) { + pub fn run(self: &Rc, input: Receiver, on_init: Option) { for msg in input.iter() { let typ = &msg.body.typ; if let "init" = typ.as_str() {