Skip to content

Commit

Permalink
[search_generators.rs] Deduplicate field population code.
Browse files Browse the repository at this point in the history
  • Loading branch information
lgarron committed Oct 18, 2024
1 parent 671d382 commit a5c0890
Showing 1 changed file with 21 additions and 32 deletions.
53 changes: 21 additions & 32 deletions src/rs/_internal/canonical_fsm/search_generators.rs
Original file line number Diff line number Diff line change
Expand Up @@ -127,50 +127,39 @@ impl SearchGenerators {
let mut move_multiple_transformation =
KTransformationBuffer::from(move_transformation.clone());

let mut populate_fields = |r#move: Move, transformation: &KTransformation| {
let info = MoveTransformationInfo {
r#move: r#move.clone(),
// metric_turns: 1, // TODO
transformation: transformation.clone(),
inverse_transformation: transformation.invert(),
flat_move_index: FlatMoveIndex(flat.len()),
};
multiples.push(info.clone());
flat.push(info.clone());
by_move.insert(r#move, (move_class_index, info));
};

match metric {
MetricEnum::Hand => {
let mut amount: i32 = r#move.amount;
while move_multiple_transformation.current() != &identity_transformation {
let mut move_multiple = r#move.clone();
move_multiple.amount = canonicalize_center_amount(order, amount);
let info = MoveTransformationInfo {
r#move: move_multiple.clone(),
// metric_turns: 1, // TODO
transformation: move_multiple_transformation.current().clone(),
inverse_transformation: move_multiple_transformation.current().invert(),
flat_move_index: FlatMoveIndex(flat.len()),
};
multiples.push(info.clone());
flat.push(info.clone());
by_move.insert(move_multiple, (move_class_index, info));
populate_fields(move_multiple, move_multiple_transformation.current());

amount += r#move.amount;
move_multiple_transformation.apply_transformation(&move_transformation);
}
}
MetricEnum::Quantum => {
let info = MoveTransformationInfo {
r#move: r#move.clone(),
// metric_turns: 1, // TODO
transformation: move_multiple_transformation.current().clone(),
inverse_transformation: move_multiple_transformation.current().invert(),
flat_move_index: FlatMoveIndex(flat.len()),
};
let is_self_inverse = info.transformation == info.inverse_transformation;
multiples.push(info.clone());
flat.push(info.clone());
by_move.insert(r#move.clone(), (move_class_index, info));
if !is_self_inverse {
let info = MoveTransformationInfo {
r#move: r#move.invert(),
// metric_turns: 1, // TODO
transformation: move_multiple_transformation.current().invert(),
inverse_transformation: move_multiple_transformation.current().clone(),
flat_move_index: FlatMoveIndex(flat.len()),
};
multiples.push(info.clone());
flat.push(info.clone());
by_move.insert(r#move.invert(), (move_class_index, info));
let transformation = move_multiple_transformation.current();
populate_fields(r#move.clone(), transformation);

let inverse_transformation = transformation.invert();
if transformation != &inverse_transformation {
// TODO: avoid redundant calculations?
populate_fields(r#move.invert(), &inverse_transformation);
}
}
}
Expand Down

0 comments on commit a5c0890

Please sign in to comment.