File tree Expand file tree Collapse file tree 6 files changed +49
-25
lines changed Expand file tree Collapse file tree 6 files changed +49
-25
lines changed Original file line number Diff line number Diff line change @@ -3,3 +3,6 @@ name = "rc"
33version = " 0.1.0"
44authors = [
" Bart Massey <[email protected] >" ]
55edition = " 2018"
6+
7+ [features ]
8+ show_message_drop = []
Original file line number Diff line number Diff line change 11use rc:: message:: Message ;
2+ use rc:: misc:: make_messages;
23use 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-
145fn main ( ) {
156 let ( m1, m2) = make_messages ( "m1" , "m2" ) ;
167 println ! ( "{} {:?}" , m1. text( ) , m1) ;
Original file line number Diff line number Diff line change 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) ;
Original file line number Diff line number Diff line change @@ -4,3 +4,4 @@ pub mod count;
44pub mod counter;
55pub mod message;
66pub mod ctr;
7+ pub mod misc;
Original file line number Diff line number Diff 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+ }
Original file line number Diff line number Diff line change 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+ }
You can’t perform that action at this time.
0 commit comments