Skip to content

Commit 6110797

Browse files
committed
Wrote the condition that checks if the array is convertable. If it only contains numeric indexes and it starts on 0 and contains every element in the range. Then it is convertable to a rust array
1 parent 63d1af8 commit 6110797

File tree

1 file changed

+35
-1
lines changed

1 file changed

+35
-1
lines changed

src/generate.rs

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -472,7 +472,41 @@ fn register_block(registers: &[Register], defs: &Defaults) -> Result<Tokens> {
472472
match *register {
473473
Register::Single(ref _into) => registers_expanded.push(register.clone()),
474474
Register::Array(ref _into, ref array_info) => {
475-
let array_convertable = false; // TODO: write this condition
475+
let array_convertable = if let Some(ref indexes) = array_info.dim_index {
476+
let mut index_iter = indexes.iter();
477+
let mut previous = 0;
478+
479+
let get_number_option = |element_option: Option<&String>| -> Option<usize> {element_option
480+
.and_then(|element| match element.parse::<usize>() {
481+
Ok(i) => Some(i),
482+
_ => None,
483+
})
484+
};
485+
486+
let mut array_convertable_temp = match get_number_option(index_iter.next()) {
487+
Some(0) => true,
488+
_ => false,
489+
};
490+
491+
for element in index_iter {
492+
if !array_convertable_temp { break; }
493+
494+
array_convertable_temp = match get_number_option(Some(element)) {
495+
Some(i) => i == previous+1,
496+
_ => false,
497+
};
498+
499+
previous = match get_number_option(Some(element)) {
500+
Some(i) => i,
501+
_ => {break;},
502+
};
503+
}
504+
505+
array_convertable_temp
506+
} else {
507+
false
508+
};
509+
476510

477511
if array_convertable {
478512
registers_expanded.push(register.clone());

0 commit comments

Comments
 (0)