@@ -86,21 +86,21 @@ impl<K, V> Tree<K, V> {
86
86
Tree :: Node ( n) => match key. cmp ( & n. key ) {
87
87
cmp:: Ordering :: Less => Tree :: Node ( Node {
88
88
left : Rc :: new ( n. left . insert ( key, value) ) ,
89
- key : n. key . clone ( ) ,
90
- right : n. right . clone ( ) ,
91
- value : n. value . clone ( ) ,
89
+ key : Rc :: clone ( & n. key ) ,
90
+ right : Rc :: clone ( & n. right ) ,
91
+ value : Rc :: clone ( & n. value ) ,
92
92
} ) ,
93
93
cmp:: Ordering :: Equal => Tree :: Node ( Node {
94
94
value : Rc :: new ( value) ,
95
- key : n. key . clone ( ) ,
96
- left : n. left . clone ( ) ,
97
- right : n. right . clone ( ) ,
95
+ key : Rc :: clone ( & n. key ) ,
96
+ left : Rc :: clone ( & n. left ) ,
97
+ right : Rc :: clone ( & n. right ) ,
98
98
} ) ,
99
99
cmp:: Ordering :: Greater => Tree :: Node ( Node {
100
100
right : Rc :: new ( n. right . insert ( key, value) ) ,
101
- key : n. key . clone ( ) ,
102
- left : n. left . clone ( ) ,
103
- value : n. value . clone ( ) ,
101
+ key : Rc :: clone ( & n. key ) ,
102
+ left : Rc :: clone ( & n. left ) ,
103
+ value : Rc :: clone ( & n. value ) ,
104
104
} ) ,
105
105
} ,
106
106
}
@@ -162,9 +162,9 @@ impl<K, V> Tree<K, V> {
162
162
Tree :: Node ( n) => match k. cmp ( & n. key ) {
163
163
cmp:: Ordering :: Less => Tree :: Node ( Node {
164
164
left : Rc :: new ( n. left . delete ( k) ) ,
165
- key : n. key . clone ( ) ,
166
- right : n. right . clone ( ) ,
167
- value : n. value . clone ( ) ,
165
+ key : Rc :: clone ( & n. key ) ,
166
+ right : Rc :: clone ( & n. right ) ,
167
+ value : Rc :: clone ( & n. value ) ,
168
168
} ) ,
169
169
cmp:: Ordering :: Equal => match ( n. left . as_ref ( ) , n. right . as_ref ( ) ) {
170
170
( Tree :: Leaf , Tree :: Leaf ) => Tree :: Leaf ,
@@ -179,17 +179,17 @@ impl<K, V> Tree<K, V> {
179
179
let ( pred_key, pred_val, new_left) = left_child. delete_largest ( ) ;
180
180
Tree :: Node ( Node {
181
181
left : new_left,
182
- right : n. right . clone ( ) ,
182
+ right : Rc :: clone ( & n. right ) ,
183
183
key : pred_key,
184
184
value : pred_val,
185
185
} )
186
186
}
187
187
} ,
188
188
cmp:: Ordering :: Greater => Tree :: Node ( Node {
189
189
right : Rc :: new ( n. right . delete ( k) ) ,
190
- key : n. key . clone ( ) ,
191
- left : n. left . clone ( ) ,
192
- value : n. value . clone ( ) ,
190
+ key : Rc :: clone ( & n. key ) ,
191
+ left : Rc :: clone ( & n. left ) ,
192
+ value : Rc :: clone ( & n. value ) ,
193
193
} ) ,
194
194
} ,
195
195
}
@@ -214,10 +214,10 @@ pub struct Node<K, V> {
214
214
impl < K , V > Clone for Node < K , V > {
215
215
fn clone ( & self ) -> Self {
216
216
Self {
217
- key : self . key . clone ( ) ,
218
- value : self . value . clone ( ) ,
219
- left : self . left . clone ( ) ,
220
- right : self . right . clone ( ) ,
217
+ key : Rc :: clone ( & self . key ) ,
218
+ left : Rc :: clone ( & self . left ) ,
219
+ right : Rc :: clone ( & self . right ) ,
220
+ value : Rc :: clone ( & self . value ) ,
221
221
}
222
222
}
223
223
}
@@ -239,7 +239,11 @@ impl<K, V> Node<K, V> {
239
239
K : cmp:: Ord ,
240
240
{
241
241
match self . right . as_ref ( ) {
242
- Tree :: Leaf => ( self . key . clone ( ) , self . value . clone ( ) , self . left . clone ( ) ) ,
242
+ Tree :: Leaf => (
243
+ Rc :: clone ( & self . key ) ,
244
+ Rc :: clone ( & self . value ) ,
245
+ Rc :: clone ( & self . left ) ,
246
+ ) ,
243
247
Tree :: Node ( r) => {
244
248
let ( key, value, sub) = r. delete_largest ( ) ;
245
249
@@ -248,9 +252,9 @@ impl<K, V> Node<K, V> {
248
252
value,
249
253
Rc :: new ( Tree :: Node ( Node {
250
254
right : sub,
251
- left : self . left . clone ( ) ,
252
- key : self . key . clone ( ) ,
253
- value : self . value . clone ( ) ,
255
+ key : Rc :: clone ( & self . key ) ,
256
+ left : Rc :: clone ( & self . left ) ,
257
+ value : Rc :: clone ( & self . value ) ,
254
258
} ) ) ,
255
259
)
256
260
}
0 commit comments