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