File tree 6 files changed +49
-25
lines changed
6 files changed +49
-25
lines changed Original file line number Diff line number Diff line change @@ -3,3 +3,6 @@ name = "rc"
3
3
version = " 0.1.0"
4
4
authors = [
" Bart Massey <[email protected] >" ]
5
5
edition = " 2018"
6
+
7
+ [features ]
8
+ show_message_drop = []
Original file line number Diff line number Diff line change 1
1
use rc:: message:: Message ;
2
+ use rc:: misc:: make_messages;
2
3
use rc:: counter:: Counter ;
3
4
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
-
14
5
fn main ( ) {
15
6
let ( m1, m2) = make_messages ( "m1" , "m2" ) ;
16
7
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 ;
5
3
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;
11
6
12
7
#[ derive( Clone ) ]
13
- struct MessageList < ' a > {
8
+ struct MessageList {
14
9
cur : Message ,
15
- next : Option < Rc < RefCell < MessageList < ' a > > > > ,
10
+ next : Option < Rc < RefCell < MessageList > > > ,
16
11
}
17
12
18
- impl < ' a > MessageList < ' a > {
19
- fn new ( cur : Message ) -> MessageList < ' a > {
13
+ impl MessageList {
14
+ fn new ( cur : Message ) -> MessageList {
20
15
MessageList { cur, next : None }
21
16
}
22
17
@@ -59,8 +54,8 @@ fn message() {
59
54
60
55
/// Make a couple of message lists with given message
61
56
/// 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 )
64
59
{
65
60
let ( m1, m2) = make_messages ( m1, m2) ;
66
61
let ml1 = MessageList :: new ( m1) ;
Original file line number Diff line number Diff line change @@ -4,3 +4,4 @@ pub mod count;
4
4
pub mod counter;
5
5
pub mod message;
6
6
pub mod ctr;
7
+ pub mod misc;
Original file line number Diff line number Diff line change @@ -47,3 +47,25 @@ impl Message {
47
47
self . counter . value ( )
48
48
}
49
49
}
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