@@ -16,14 +16,11 @@ const DOWN: usize = 0b0001;
16
16
pub struct WallJunction ( usize ) ;
17
17
18
18
impl WallJunction {
19
- pub fn new ( ) -> WallJunction {
20
- WallJunction ( 0 )
21
- }
22
-
23
19
fn set ( & mut self , bit : usize , activate : bool ) {
24
20
if activate {
25
21
self . 0 |= bit;
26
- } else {
22
+ }
23
+ else {
27
24
self . 0 &= !bit;
28
25
}
29
26
}
@@ -57,6 +54,12 @@ impl WallJunction {
57
54
}
58
55
}
59
56
57
+ impl Default for WallJunction {
58
+ fn default ( ) -> Self {
59
+ WallJunction ( 0 )
60
+ }
61
+ }
62
+
60
63
impl From < WallJunction > for char {
61
64
fn from ( wj : WallJunction ) -> Self {
62
65
match wj. 0 {
@@ -82,7 +85,7 @@ impl From<WallJunction> for char {
82
85
83
86
impl fmt:: Display for WallJunction {
84
87
fn fmt ( & self , f : & mut fmt:: Formatter < ' _ > ) -> fmt:: Result {
85
- write ! ( f, "{}" , char :: from( self . clone ( ) ) )
88
+ write ! ( f, "{}" , char :: from( * self ) )
86
89
}
87
90
}
88
91
@@ -136,7 +139,8 @@ impl Map {
136
139
for r in 0 ..( rows * 2 - 1 ) {
137
140
if r % 2 == 0 {
138
141
map. push ( vec ! [ value; columns - 1 ] ) ;
139
- } else {
142
+ }
143
+ else {
140
144
map. push ( vec ! [ value; columns] ) ;
141
145
}
142
146
}
@@ -173,14 +177,15 @@ impl Map {
173
177
let moved_positions = DIRECTIONS
174
178
. iter ( )
175
179
. filter_map ( |d| map. move_in_direction ( & next, d) . map ( |m| ( m, d) ) )
176
- . filter ( |( m, _) | !visited. contains ( & m) ) . collect :: < Vec < ( ( usize , usize ) , & Direction ) > > ( ) ;
180
+ . filter ( |( m, _) | !visited. contains ( & m) )
181
+ . collect :: < Vec < ( ( usize , usize ) , & Direction ) > > ( ) ;
177
182
if moved_positions. len ( ) > 1 {
178
183
to_visit. push ( next) ;
179
184
}
180
185
if let Some ( ( moved, dir) ) = moved_positions. choose ( & mut rng) {
181
186
map. set ( next. 0 , next. 1 , dir, false ) ;
182
- to_visit. push ( moved. clone ( ) ) ;
183
- visited. insert ( moved. clone ( ) ) ;
187
+ to_visit. push ( * moved) ;
188
+ visited. insert ( * moved) ;
184
189
peek ( & map, & next, & dir) ;
185
190
}
186
191
}
@@ -247,7 +252,7 @@ impl Map {
247
252
visited. insert ( start) ;
248
253
let mut walls = map. walls_around ( & start) ;
249
254
250
- while walls. len ( ) > 0 {
255
+ while ! walls. is_empty ( ) {
251
256
walls. shuffle ( & mut rng) ;
252
257
let ( from, dir) = walls. pop ( ) . unwrap ( ) ;
253
258
if let Some ( to) = map. move_in_direction ( & from, & dir) {
@@ -284,17 +289,18 @@ impl Map {
284
289
visited. insert ( start) ;
285
290
let mut has_neighbors = vec ! [ start] ;
286
291
287
- while has_neighbors. len ( ) > 0 {
292
+ while ! has_neighbors. is_empty ( ) {
288
293
let index = rng. gen_range ( 0 , has_neighbors. len ( ) ) ;
289
294
let next = has_neighbors[ index] ;
290
295
let moved_positions = DIRECTIONS
291
296
. iter ( )
292
297
. filter_map ( |d| map. move_in_direction ( & next, d) . map ( |m| ( m, d) ) )
293
- . filter ( |( m, _) | !visited. contains ( & m) ) . collect :: < Vec < ( ( usize , usize ) , & Direction ) > > ( ) ;
298
+ . filter ( |( m, _) | !visited. contains ( & m) )
299
+ . collect :: < Vec < ( ( usize , usize ) , & Direction ) > > ( ) ;
294
300
if moved_positions. len ( ) <= 1 {
295
301
has_neighbors. remove ( index) ;
296
302
}
297
- if moved_positions. len ( ) > 0 {
303
+ if ! moved_positions. is_empty ( ) {
298
304
let moved = moved_positions. choose ( & mut rng) . unwrap ( ) ;
299
305
map. set ( next. 0 , next. 1 , moved. 1 , false ) ;
300
306
peek ( & map, & next, moved. 1 ) ;
@@ -306,12 +312,7 @@ impl Map {
306
312
map
307
313
}
308
314
309
- pub fn generate_div < F , G > (
310
- rows : usize ,
311
- columns : usize ,
312
- mut initial_peek : F ,
313
- mut peek : G ,
314
- ) -> Map
315
+ pub fn generate_div < F , G > ( rows : usize , columns : usize , mut initial_peek : F , mut peek : G ) -> Map
315
316
where
316
317
F : FnMut ( & Map ) ,
317
318
G : FnMut ( & Map , & ( usize , usize ) , & Direction ) ,
@@ -468,7 +469,7 @@ impl Map {
468
469
. iter ( )
469
470
. filter_map ( |dir| {
470
471
if self . is ( pos. 0 , pos. 1 , dir) == Some ( true ) {
471
- return Some ( ( pos. clone ( ) , dir. clone ( ) ) ) ;
472
+ return Some ( ( * pos, * dir) ) ;
472
473
}
473
474
None
474
475
} )
@@ -517,8 +518,8 @@ impl Map {
517
518
518
519
pub fn get_chars ( & self , pos : & ( usize , usize ) , dir : & Direction ) -> ( char , char ) {
519
520
if dir == & Direction :: Left || dir == & Direction :: Right {
520
- let mut above = WallJunction :: new ( ) ;
521
- let mut below = WallJunction :: new ( ) ;
521
+ let mut above = WallJunction :: default ( ) ;
522
+ let mut below = WallJunction :: default ( ) ;
522
523
523
524
if self . is ( pos. 0 , pos. 1 , dir) . unwrap_or ( true ) {
524
525
above. set_down ( true ) ;
@@ -568,8 +569,8 @@ impl Map {
568
569
( char:: from ( above) , char:: from ( below) )
569
570
}
570
571
else {
571
- let mut left = WallJunction :: new ( ) ;
572
- let mut right = WallJunction :: new ( ) ;
572
+ let mut left = WallJunction :: default ( ) ;
573
+ let mut right = WallJunction :: default ( ) ;
573
574
574
575
if self . is ( pos. 0 , pos. 1 , dir) . unwrap_or ( true ) {
575
576
left. set_right ( true ) ;
@@ -640,7 +641,8 @@ fn build_path(
640
641
} ,
641
642
) ;
642
643
part
643
- } else {
644
+ }
645
+ else {
644
646
Vec :: new ( )
645
647
}
646
648
}
@@ -656,7 +658,7 @@ impl fmt::Display for Map {
656
658
657
659
for r in 0 ..( self . rows - 1 ) {
658
660
above = below;
659
- below = vec ! [ WallJunction :: new ( ) ; self . columns + 1 ] ;
661
+ below = vec ! [ WallJunction :: default ( ) ; self . columns + 1 ] ;
660
662
below[ 0 ] = VERTICAL ;
661
663
below[ self . columns ] = VERTICAL ;
662
664
0 commit comments