From 22f8cd6c66d2bfef2cf47ed03b68bf0bcd16e5e1 Mon Sep 17 00:00:00 2001 From: Andrew Johnson Date: Wed, 23 May 2018 19:37:55 -0600 Subject: [PATCH] chapter 7 tr suggestions --- Chapter07/combinator_pattern.rs | 15 +++++++-------- Chapter07/lazy_pattern.rs | 14 +++++++------- 2 files changed, 14 insertions(+), 15 deletions(-) diff --git a/Chapter07/combinator_pattern.rs b/Chapter07/combinator_pattern.rs index c5e4ee3..2de469b 100644 --- a/Chapter07/combinator_pattern.rs +++ b/Chapter07/combinator_pattern.rs @@ -1,7 +1,7 @@ #[macro_use] extern crate chomp; use chomp::prelude::*; -use std::sync::{Arc,Mutex}; +use std::rc::Rc; #[derive(Debug, Eq, PartialEq)] struct Name { @@ -25,7 +25,7 @@ fn name(i: I) -> SimpleResult> { #[derive(Clone)] struct ParseState { - buffer: Arc>>, + buffer: Rc>, index: usize, a: A } @@ -33,24 +33,23 @@ impl ParseState { fn new(a: A, buffer: String) -> ParseState { let buffer: Vec = buffer.chars().collect(); ParseState { - buffer: Arc::new(Mutex::new(buffer)), + buffer: Rc::new(buffer), index: 0, a: a } } fn next(&self) -> (ParseState,Option) { - let buf = self.buffer.lock().unwrap(); - if self.index < buf.len() { - let new_char = buf[self.index]; + if self.index < self.buffer.len() { + let new_char = self.buffer[self.index]; let new_index = self.index + 1; (ParseState { - buffer: Arc::clone(&self.buffer), + buffer: Rc::clone(&self.buffer), index: new_index, a: self.a.clone() }, Some(new_char)) } else { (ParseState { - buffer: Arc::clone(&self.buffer), + buffer: Rc::clone(&self.buffer), index: self.index, a: self.a.clone() },None) diff --git a/Chapter07/lazy_pattern.rs b/Chapter07/lazy_pattern.rs index f0bf57f..635a4bd 100644 --- a/Chapter07/lazy_pattern.rs +++ b/Chapter07/lazy_pattern.rs @@ -1,24 +1,24 @@ +use std::rc::Rc; use std::sync::{Arc,Mutex}; #[derive(Clone)] struct LazyList { - buffer: Arc>>, + buffer: Rc>, index: usize } impl LazyList { fn new(buf: Vec) -> LazyList { LazyList { - buffer: Arc::new(Mutex::new(buf)), + buffer: Rc::new(buf), index: 0 } } fn next(&self) -> Option<(LazyList,A)> { - let buf = self.buffer.lock().unwrap(); - if self.index < buf.len() { - let new_item = buf[self.index].clone(); + if self.index < self.buffer.len() { + let new_item = self.buffer[self.index].clone(); let new_index = self.index + 1; Some((LazyList { - buffer: Arc::clone(&self.buffer), + buffer: Rc::clone(&self.buffer), index: new_index },new_item)) } else { @@ -63,7 +63,7 @@ impl ReactiveUnit { }) } } - fn rbind(&self, other: ReactiveUnit) -> ReactiveUnit<(Arc>,Arc>),A,C> { + fn plus(&self, other: ReactiveUnit) -> ReactiveUnit<(Arc>,Arc>),A,C> { let ev1 = Arc::clone(&self.event_handler); let st1 = Arc::clone(&self.state); let ev2 = Arc::clone(&other.event_handler);