More idiomatic code

This commit is contained in:
elvis
2025-06-22 19:37:57 +02:00
parent c9cc011fdb
commit caa20c3570

View File

@ -1,7 +1,13 @@
#![allow(dead_code)] #![allow(dead_code)]
use super::perpetual::{ use super::perpetual::{
lollipops_decomposed_named, lollipops_named, lollipops_only_loop_decomposed, lollipops_only_loop_decomposed_named, lollipops_prefix_len_loop_decomposed, lollipops_prefix_len_loop_decomposed_named}; lollipops_decomposed_named,
lollipops_named,
lollipops_only_loop_decomposed,
lollipops_only_loop_decomposed_named,
lollipops_prefix_len_loop_decomposed,
lollipops_prefix_len_loop_decomposed_named
};
use super::structure::{RSenvironment, RSreaction, RSset}; use super::structure::{RSenvironment, RSreaction, RSset};
use super::translator::IdType; use super::translator::IdType;
use std::cmp; use std::cmp;
@ -13,37 +19,26 @@ pub fn confluent(
reaction_rules: &[RSreaction], reaction_rules: &[RSreaction],
entities: &[RSset], entities: &[RSset],
) -> Option<(usize, usize, Vec<RSset>)> { ) -> Option<(usize, usize, Vec<RSset>)> {
let mut max_distance = 0;
let mut dimension = 0;
let mut hoop = vec![];
if let Some(el) = entities.first() { let all_loops = lollipops_prefix_len_loop_decomposed(delta,
if let Some(new_hoop) = lollipops_only_loop_decomposed(delta,
reaction_rules, reaction_rules,
el).first() entities.first()?);
{ let (prefix_len, hoop) = all_loops.first()?.clone();
dimension = new_hoop.len(); let dimension = hoop.len();
hoop = new_hoop.clone(); let mut max_distance = prefix_len;
}
}
for available_entities in entities.iter().skip(1) { for available_entities in entities.iter().skip(1) {
// FIXME we take just the first? do we compare all? let all_loops = lollipops_prefix_len_loop_decomposed(delta,
if let Some((prefix_len, new_hoop)) =
lollipops_prefix_len_loop_decomposed(delta,
reaction_rules, reaction_rules,
available_entities).first() available_entities);
{ // FIXME we take just the first? do we compare all?
if new_hoop.len() != dimension || !hoop.contains(new_hoop let (prefix_len, new_hoop) = all_loops.first()?;
.first()
.unwrap()) if new_hoop.len() != dimension
{ || !hoop.contains(new_hoop.first().unwrap()) {
return None; return None;
} }
max_distance = cmp::max(max_distance, *prefix_len); max_distance = cmp::max(max_distance, *prefix_len);
} else {
return None;
}
} }
Some((max_distance, dimension, hoop)) Some((max_distance, dimension, hoop))
} }
@ -56,42 +51,27 @@ pub fn confluent_named(
entities: &[RSset], entities: &[RSset],
symb: IdType symb: IdType
) -> Option<(usize, usize, Vec<RSset>)> { ) -> Option<(usize, usize, Vec<RSset>)> {
let mut max_distance = 0; let (prefix_len, first_hoop) =
let mut dimension = 0; lollipops_prefix_len_loop_decomposed_named(delta,
let mut hoop = vec![];
if let Some(el) = entities.first() {
if let Some(new_hoop) =
lollipops_only_loop_decomposed_named(delta,
reaction_rules, reaction_rules,
el, entities.first()?,
symb) symb)?;
{ let dimension = first_hoop.len();
dimension = new_hoop.len(); let mut max_distance = prefix_len;
hoop = new_hoop.clone(); let hoop = first_hoop;
} else {
return None
}
}
for available_entities in entities.iter().skip(1) { for available_entities in entities.iter().skip(1) {
// FIXME we take just the first? do we compare all? let (prefix_len, new_hoop) =
if let Some((prefix_len, new_hoop)) =
lollipops_prefix_len_loop_decomposed_named(delta, lollipops_prefix_len_loop_decomposed_named(delta,
reaction_rules, reaction_rules,
available_entities, available_entities,
symb) symb)?;
{
if new_hoop.len() != dimension || !hoop.contains(new_hoop if new_hoop.len() != dimension
.first() || !hoop.contains(new_hoop.first().unwrap()) {
.unwrap())
{
return None; return None;
} }
max_distance = cmp::max(max_distance, prefix_len); max_distance = cmp::max(max_distance, prefix_len);
} else {
return None;
}
} }
Some((max_distance, dimension, hoop)) Some((max_distance, dimension, hoop))
} }