Skip to content

Commit 64e4dce

Browse files
Emphasize the different size types
1 parent e785bd0 commit 64e4dce

File tree

1 file changed

+22
-20
lines changed

1 file changed

+22
-20
lines changed

cminesweeper/src/lib.rs

Lines changed: 22 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,9 @@ pub enum CError {
1717
UnexpectedError,
1818
}
1919

20+
type GameSizeType = minesweeper::SizeType;
21+
type ArraySizeType = u64;
22+
2023
macro_rules! return_error {
2124
($error_info_ptr:ident, $error_code:expr, $error_msg:expr) => {{
2225
let error_info = unsafe { &mut *$error_info_ptr };
@@ -37,7 +40,7 @@ macro_rules! return_error {
3740
*error_info
3841
.error_message
3942
.offset(len_without_terminator as isize) = 0;
40-
error_info.error_message_length = len_without_terminator as u64;
43+
error_info.error_message_length = len_without_terminator as ArraySizeType;
4144
}
4245
}
4346
error_info.error_code = $error_code;
@@ -74,27 +77,26 @@ macro_rules! initialize_to_ok {
7477
}
7578

7679
// Based on this https://s3.amazonaws.com/temp.michaelfbryan.com/objects/index.html
77-
7880
#[repr(C)]
7981
pub struct CFieldInfo {
80-
row: minesweeper::SizeType,
81-
column: minesweeper::SizeType,
82+
row: GameSizeType,
83+
column: GameSizeType,
8284
field_type: FieldType,
8385
}
8486

8587
#[repr(C)]
8688
pub struct COpenInfo {
8789
result: OpenResult,
88-
field_infos_length: u64,
89-
field_infos_max_length: u64,
90+
field_infos_length: ArraySizeType,
91+
field_infos_max_length: ArraySizeType,
9092
field_infos_ptr: *mut CFieldInfo,
9193
}
9294

9395
#[repr(C)]
9496
pub struct CErrorInfo {
9597
error_code: CError,
96-
error_message_length: u64,
97-
error_message_max_length: u64,
98+
error_message_length: ArraySizeType,
99+
error_message_max_length: ArraySizeType,
98100
error_message: *mut c_char,
99101
}
100102

@@ -119,8 +121,8 @@ pub extern "C" fn minesweeper_new_game(
119121
#[no_mangle]
120122
pub extern "C" fn minesweeper_game_open(
121123
game_ptr: *mut Game,
122-
row: minesweeper::SizeType,
123-
column: minesweeper::SizeType,
124+
row: GameSizeType,
125+
column: GameSizeType,
124126
c_open_info_ptr: *mut COpenInfo,
125127
c_ei_ptr: *mut CErrorInfo,
126128
) {
@@ -143,7 +145,7 @@ pub extern "C" fn minesweeper_game_open(
143145
let game = unsafe { &mut *game_ptr };
144146
let open_info = return_or_assign!(game.open(row, column), c_ei_ptr);
145147

146-
if open_info.field_infos.len() as u64 > c_open_info.field_infos_max_length {
148+
if open_info.field_infos.len() as ArraySizeType > c_open_info.field_infos_max_length {
147149
return;
148150
}
149151
c_open_info.result = open_info.result;
@@ -160,14 +162,14 @@ pub extern "C" fn minesweeper_game_open(
160162
c_field_infos[index].field_type = field_type.clone();
161163
index = index + 1;
162164
}
163-
c_open_info.field_infos_length = index as u64;
165+
c_open_info.field_infos_length = index as ArraySizeType;
164166
}
165167

166168
#[no_mangle]
167169
pub extern "C" fn minesweeper_game_toggle_flag(
168170
game_ptr: *mut Game,
169-
row: minesweeper::SizeType,
170-
column: minesweeper::SizeType,
171+
row: GameSizeType,
172+
column: GameSizeType,
171173
field_flag_result_ptr: *mut FlagResult,
172174
c_ei_ptr: *mut CErrorInfo,
173175
) {
@@ -202,7 +204,7 @@ pub extern "C" fn minesweeper_destroy_game(
202204
#[no_mangle]
203205
pub extern "C" fn minesweeper_game_get_width(
204206
game_ptr: *const Game,
205-
width_ptr: *mut minesweeper::SizeType,
207+
width_ptr: *mut GameSizeType,
206208
c_ei_ptr: *mut CErrorInfo,
207209
) {
208210
initialize_to_ok!(c_ei_ptr);
@@ -217,7 +219,7 @@ pub extern "C" fn minesweeper_game_get_width(
217219
#[no_mangle]
218220
pub extern "C" fn minesweeper_game_get_height(
219221
game_ptr: *const Game,
220-
height_ptr: *mut minesweeper::SizeType,
222+
height_ptr: *mut GameSizeType,
221223
c_ei_ptr: *mut CErrorInfo,
222224
) {
223225
initialize_to_ok!(c_ei_ptr);
@@ -280,7 +282,7 @@ mod test {
280282
fn create_open_info_with_size(size: usize) -> BufferedData<COpenInfo, CFieldInfo> {
281283
let mut buffer = Vec::with_capacity(size);
282284
let field_infos_ptr = buffer.as_mut_ptr();
283-
let field_infos_max_length = u64::try_from(size).expect("Size conversion failed");
285+
let field_infos_max_length = ArraySizeType::try_from(size).expect("Size conversion failed");
284286
let data = COpenInfo {
285287
result: OpenResult::Boom,
286288
field_infos_length: 0,
@@ -309,7 +311,7 @@ mod test {
309311
let mut data = CErrorInfo {
310312
error_code: CError::UnexpectedError,
311313
error_message_length: 0,
312-
error_message_max_length: u64::try_from(max_error_length)
314+
error_message_max_length: ArraySizeType::try_from(max_error_length)
313315
.expect("Size conversion failed"),
314316
error_message,
315317
};
@@ -333,7 +335,7 @@ mod test {
333335
result
334336
}
335337

336-
fn get_width(game_ptr: *mut Game) -> minesweeper::SizeType {
338+
fn get_width(game_ptr: *mut Game) -> GameSizeType {
337339
let mut error_info = create_empty_error_info();
338340
let mut width = 0;
339341

@@ -344,7 +346,7 @@ mod test {
344346
width
345347
}
346348

347-
fn get_height(game_ptr: *mut Game) -> minesweeper::SizeType {
349+
fn get_height(game_ptr: *mut Game) -> GameSizeType {
348350
let mut error_info = create_empty_error_info();
349351
let mut height = 0;
350352

0 commit comments

Comments
 (0)