Skip to content

Commit abd9a82

Browse files
committed
finished out rest of rc
1 parent 1156884 commit abd9a82

File tree

6 files changed

+49
-25
lines changed

6 files changed

+49
-25
lines changed

rc/Cargo.toml

+3
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,6 @@ name = "rc"
33
version = "0.1.0"
44
authors = ["Bart Massey <[email protected]>"]
55
edition = "2018"
6+
7+
[features]
8+
show_message_drop = []

rc/examples/04-messages.rs

+1-10
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,7 @@
11
use rc::message::Message;
2+
use rc::misc::make_messages;
23
use rc::counter::Counter;
34

4-
/// Make a couple of messages with given message strings.
5-
pub fn make_messages(m1: &'static str, m2: &'static str)
6-
-> (Message, Message)
7-
{
8-
let counter = Counter::default();
9-
let m1 = Message::with_counter(m1, Counter::clone(&counter));
10-
let m2 = Message::with_counter(m2, counter);
11-
(m1, m2)
12-
}
13-
145
fn main() {
156
let (m1, m2) = make_messages("m1", "m2");
167
println!("{} {:?}", m1.text(), m1);

rc/examples/05-cycles.rs

+10-15
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,17 @@
1-
// https://doc.rust-lang.org/std/cell/
2-
mod count;
3-
mod rcmessage;
4-
pub use rcmessage::*;
1+
use std::cell::RefCell;
2+
use std::rc::Rc;
53

6-
impl Drop for Message {
7-
fn drop(&mut self) {
8-
println!("dropping {}", self.message);
9-
}
10-
}
4+
use rc::message::Message;
5+
use rc::misc::make_messages;
116

127
#[derive(Clone)]
13-
struct MessageList<'a> {
8+
struct MessageList {
149
cur: Message,
15-
next: Option<Rc<RefCell<MessageList<'a>>>>,
10+
next: Option<Rc<RefCell<MessageList>>>,
1611
}
1712

18-
impl<'a> MessageList<'a> {
19-
fn new(cur: Message) -> MessageList<'a> {
13+
impl MessageList {
14+
fn new(cur: Message) -> MessageList {
2015
MessageList { cur, next: None }
2116
}
2217

@@ -59,8 +54,8 @@ fn message() {
5954

6055
/// Make a couple of message lists with given message
6156
/// strings and no tail.
62-
fn make_message_lists<'a>(m1: &'static str, m2: &'static str)
63-
-> (MessageList<'a>, MessageList<'a>)
57+
fn make_message_lists(m1: &'static str, m2: &'static str)
58+
-> (MessageList, MessageList)
6459
{
6560
let (m1, m2) = make_messages(m1, m2);
6661
let ml1 = MessageList::new(m1);

rc/src/lib.rs

+1
Original file line numberDiff line numberDiff line change
@@ -4,3 +4,4 @@ pub mod count;
44
pub mod counter;
55
pub mod message;
66
pub mod ctr;
7+
pub mod misc;

rc/src/message.rs

+22
Original file line numberDiff line numberDiff line change
@@ -47,3 +47,25 @@ impl Message {
4747
self.counter.value()
4848
}
4949
}
50+
51+
/// Some additional functionality for the `05-cycles` demo.
52+
impl Message {
53+
/// Print the message and counter.
54+
pub fn print(&self) {
55+
self.counter.incr();
56+
print!("{} {}", self.message, self.counter.value());
57+
}
58+
59+
/// Add a newline.
60+
pub fn println(&self) {
61+
self.print();
62+
println!();
63+
}
64+
}
65+
66+
#[cfg(feature = "show_message_drop")]
67+
impl Drop for Message {
68+
fn drop(&mut self) {
69+
println!("dropping message {}", self.message);
70+
}
71+
}

rc/src/misc.rs

+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
use crate::counter::Counter;
2+
use crate::message::Message;
3+
4+
/// Make a couple of messages with given message strings.
5+
pub fn make_messages(m1: &'static str, m2: &'static str)
6+
-> (Message, Message)
7+
{
8+
let counter = Counter::default();
9+
let m1 = Message::with_counter(m1, Counter::clone(&counter));
10+
let m2 = Message::with_counter(m2, counter);
11+
(m1, m2)
12+
}

0 commit comments

Comments
 (0)