@@ -78,7 +78,7 @@ macro_rules! initialize_to_ok {
78
78
79
79
// Based on this https://s3.amazonaws.com/temp.michaelfbryan.com/objects/index.html
80
80
#[ repr( C ) ]
81
- pub struct CFieldInfo {
81
+ pub struct COpenedField {
82
82
row : GameSizeType ,
83
83
column : GameSizeType ,
84
84
field_type : FieldType ,
@@ -87,9 +87,9 @@ pub struct CFieldInfo {
87
87
#[ repr( C ) ]
88
88
pub struct COpenInfo {
89
89
result : OpenResult ,
90
- field_infos_length : ArraySizeType ,
91
- field_infos_max_length : ArraySizeType ,
92
- field_infos_ptr : * mut CFieldInfo ,
90
+ newly_opened_fields_length : ArraySizeType ,
91
+ newly_opened_fields_max_length : ArraySizeType ,
92
+ newly_opened_fields_ptr : * mut COpenedField ,
93
93
}
94
94
95
95
#[ repr( C ) ]
@@ -132,37 +132,39 @@ pub extern "C" fn minesweeper_game_open(
132
132
}
133
133
134
134
let mut c_open_info = unsafe { & mut * c_open_info_ptr } ;
135
- if c_open_info. field_infos_length != 0 {
135
+ if c_open_info. newly_opened_fields_length != 0 {
136
136
return_error ! ( c_ei_ptr, CError :: InvalidInput ) ;
137
137
}
138
- if c_open_info. field_infos_max_length == 0 {
138
+ if c_open_info. newly_opened_fields_max_length == 0 {
139
139
return_error ! ( c_ei_ptr, CError :: InsufficientBuffer ) ;
140
140
}
141
- if c_open_info. field_infos_ptr . is_null ( ) {
141
+ if c_open_info. newly_opened_fields_ptr . is_null ( ) {
142
142
return_error ! ( c_ei_ptr, CError :: NullPointerAsInput ) ;
143
143
}
144
144
145
145
let game = unsafe { & mut * game_ptr } ;
146
146
let open_info = return_or_assign ! ( game. open( row, column) , c_ei_ptr) ;
147
147
148
- if open_info. field_infos . len ( ) as ArraySizeType > c_open_info. field_infos_max_length {
148
+ if open_info. newly_opened_fields . len ( ) as ArraySizeType
149
+ > c_open_info. newly_opened_fields_max_length
150
+ {
149
151
return ;
150
152
}
151
153
c_open_info. result = open_info. result ;
152
- let c_field_infos : & mut [ CFieldInfo ] = unsafe {
154
+ let c_newly_opened_fields : & mut [ COpenedField ] = unsafe {
153
155
slice:: from_raw_parts_mut (
154
- c_open_info. field_infos_ptr ,
155
- c_open_info. field_infos_max_length as usize ,
156
+ c_open_info. newly_opened_fields_ptr ,
157
+ c_open_info. newly_opened_fields_max_length as usize ,
156
158
)
157
159
} ;
158
160
let mut index: usize = 0 ;
159
- for ( coords, field_type) in open_info. field_infos {
160
- c_field_infos [ index] . row = coords. 0 ;
161
- c_field_infos [ index] . column = coords. 1 ;
162
- c_field_infos [ index] . field_type = field_type. clone ( ) ;
161
+ for ( coords, field_type) in open_info. newly_opened_fields {
162
+ c_newly_opened_fields [ index] . row = coords. 0 ;
163
+ c_newly_opened_fields [ index] . column = coords. 1 ;
164
+ c_newly_opened_fields [ index] . field_type = field_type. clone ( ) ;
163
165
index = index + 1 ;
164
166
}
165
- c_open_info. field_infos_length = index as ArraySizeType ;
167
+ c_open_info. newly_opened_fields_length = index as ArraySizeType ;
166
168
}
167
169
168
170
#[ no_mangle]
@@ -279,21 +281,22 @@ mod test {
279
281
data : S ,
280
282
}
281
283
282
- fn create_open_info_with_size ( size : usize ) -> BufferedData < COpenInfo , CFieldInfo > {
284
+ fn create_open_info_with_size ( size : usize ) -> BufferedData < COpenInfo , COpenedField > {
283
285
let mut buffer = Vec :: with_capacity ( size) ;
284
- let field_infos_ptr = buffer. as_mut_ptr ( ) ;
285
- let field_infos_max_length = ArraySizeType :: try_from ( size) . expect ( "Size conversion failed" ) ;
286
+ let newly_opened_fields_ptr = buffer. as_mut_ptr ( ) ;
287
+ let newly_opened_fields_max_length =
288
+ ArraySizeType :: try_from ( size) . expect ( "Size conversion failed" ) ;
286
289
let data = COpenInfo {
287
290
result : OpenResult :: Boom ,
288
- field_infos_length : 0 ,
289
- field_infos_max_length ,
290
- field_infos_ptr ,
291
+ newly_opened_fields_length : 0 ,
292
+ newly_opened_fields_max_length ,
293
+ newly_opened_fields_ptr ,
291
294
} ;
292
295
293
296
BufferedData { buffer, data }
294
297
}
295
298
296
- fn create_open_info_for ( game_ptr : * mut Game ) -> BufferedData < COpenInfo , CFieldInfo > {
299
+ fn create_open_info_for ( game_ptr : * mut Game ) -> BufferedData < COpenInfo , COpenedField > {
297
300
let width = get_width ( game_ptr) ;
298
301
let height = get_height ( game_ptr) ;
299
302
create_open_info_with_size ( usize:: try_from ( width * height) . unwrap ( ) )
@@ -454,17 +457,21 @@ mod test {
454
457
& mut buffered_error_info. data ,
455
458
) ;
456
459
assert_ok ! ( buffered_error_info. data) ;
457
- assert ! ( buffered_open_info. data. field_infos_length > 0 ) ;
460
+ assert ! ( buffered_open_info. data. newly_opened_fields_length > 0 ) ;
458
461
assert_eq ! ( CError :: Ok , buffered_error_info. data. error_code) ;
459
462
460
- let field_infos_size = usize:: try_from ( buffered_open_info. data . field_infos_length ) . unwrap ( ) ;
463
+ let newly_opened_fields_size =
464
+ usize:: try_from ( buffered_open_info. data . newly_opened_fields_length ) . unwrap ( ) ;
461
465
let slice = unsafe {
462
- std:: slice:: from_raw_parts ( buffered_open_info. data . field_infos_ptr , field_infos_size)
466
+ std:: slice:: from_raw_parts (
467
+ buffered_open_info. data . newly_opened_fields_ptr ,
468
+ newly_opened_fields_size,
469
+ )
463
470
} ;
464
- for field_info in slice. iter ( ) {
465
- assert_ne ! ( FieldType :: Mine , field_info . field_type) ;
466
- assert ! ( height >= field_info . row) ;
467
- assert ! ( width >= field_info . column) ;
471
+ for newly_opened_field in slice. iter ( ) {
472
+ assert_ne ! ( FieldType :: Mine , newly_opened_field . field_type) ;
473
+ assert ! ( height >= newly_opened_field . row) ;
474
+ assert ! ( width >= newly_opened_field . column) ;
468
475
}
469
476
destroy_game ( & mut game_ptr) ;
470
477
}
@@ -493,10 +500,10 @@ mod test {
493
500
}
494
501
495
502
#[ test]
496
- fn open_with_not_empty_field_infos ( ) {
503
+ fn open_with_not_empty_newly_opened_fields ( ) {
497
504
let mut game_ptr = create_game ( GameLevel :: Beginner ) ;
498
505
let mut buffered_open_info = create_open_info_with_size ( 5 ) ;
499
- buffered_open_info. data . field_infos_length = 1 ;
506
+ buffered_open_info. data . newly_opened_fields_length = 1 ;
500
507
let mut error_info = create_empty_error_info ( ) ;
501
508
minesweeper_game_open (
502
509
game_ptr,
@@ -510,10 +517,10 @@ mod test {
510
517
}
511
518
512
519
#[ test]
513
- fn open_with_nullptr_as_field_infos ( ) {
520
+ fn open_with_nullptr_as_newly_opened_fields ( ) {
514
521
let mut game_ptr = create_game ( GameLevel :: Beginner ) ;
515
522
let mut buffered_open_info = create_open_info_with_size ( 5 ) ;
516
- buffered_open_info. data . field_infos_ptr = std:: ptr:: null_mut ( ) ;
523
+ buffered_open_info. data . newly_opened_fields_ptr = std:: ptr:: null_mut ( ) ;
517
524
let mut error_info = create_empty_error_info ( ) ;
518
525
minesweeper_game_open (
519
526
game_ptr,
@@ -530,7 +537,7 @@ mod test {
530
537
fn open_with_insufficient_buffer ( ) {
531
538
let mut game_ptr = create_game ( GameLevel :: Beginner ) ;
532
539
let mut buffered_open_info = create_open_info_with_size ( 5 ) ;
533
- buffered_open_info. data . field_infos_max_length = 0 ;
540
+ buffered_open_info. data . newly_opened_fields_max_length = 0 ;
534
541
let mut error_info = create_empty_error_info ( ) ;
535
542
minesweeper_game_open (
536
543
game_ptr,
0 commit comments