diff --git a/src/expr/linkplan.rs b/src/expr/linkplan.rs index 8d42fd4..3cadab0 100644 --- a/src/expr/linkplan.rs +++ b/src/expr/linkplan.rs @@ -19,29 +19,29 @@ struct PreHasseNode { * split the derivation-vectors into levels (sum of their components) */ -fn sum(drvs: &[u16]) -> usize { +fn sum(drvs: &[u8]) -> usize { drvs.iter().copied().map(usize::from).sum::() } -fn parents(drvs: &[u16]) -> impl Iterator> + '_ { +fn parents(drvs: &[u8]) -> impl Iterator> + '_ { drvs.iter() .enumerate() .filter_map(|(n, i)| i.checked_sub(1).map(|i2| (n, i2))) .map(|(n, j)| { - let mut i2: Box<[u16]> = drvs.to_owned().into_boxed_slice(); + let mut i2: Box<[u8]> = drvs.to_owned().into_boxed_slice(); i2[n] = j; i2 }) } /// calculate votes for each possible parent -fn calculate_votes(mut que: Vec>) -> Vec, u16>> { +fn calculate_votes(mut que: Vec>) -> Vec, u16>> { assert!(que.len() <= usize::from(u16::MAX)); // split que into levels let mut levels = core::iter::repeat_with(BTreeMap::new) .take(que.iter().map(|i| sum(&i[..])).max().map(|i| i.checked_add(1).unwrap()).unwrap_or(0)) - .collect::, u16>>>(); + .collect::, u16>>>(); for i in core::mem::replace(&mut que, Vec::new()) { let mut l = &mut levels[sum(&i[..])]; diff --git a/src/expr/mod.rs b/src/expr/mod.rs index 381c30e..95b0c7a 100644 --- a/src/expr/mod.rs +++ b/src/expr/mod.rs @@ -12,7 +12,7 @@ use yz_string_utils::StrLexerBase; /// A reference to a PDE variable or derivative of such #[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)] -pub struct Link(pub u16, pub Box<[u16]>); +pub struct Link(pub u16, pub Box<[u8]>); #[derive(Clone, Debug, PartialEq)] pub enum Expr { @@ -167,7 +167,7 @@ impl ParseLink for Link { if dr.is_empty() { break; } - let dr = dr.parse::()?; + let dr = dr.parse::()?; derivatives.push(dr); } @@ -259,11 +259,11 @@ pub fn parse_expr_final(slb: &mut StrLexerBase) -> Result< ``` %vs # u_t + 0.11 u_x = 0 -0; prod(-0.11, 0_0_) +0; prod(-0.11, 0_1) %mons # monitor u @ 1 + sin(t) -0_; sum(1.0, sin(.)) +0_0; sum(1.0, sin(.)) ``` # Syntax: @@ -374,11 +374,11 @@ mod tests { println!("{:?}", parse_system(" %vs # u_t + 0.11 u_x = 0 -0; prod(-0.11, 0_0_) +0; prod(-0.11, 0_1_) %mons # monitor u @ 1 + sin(t) -0_; sum(1.0, sin(.)) +0_0; sum(1.0, sin(.)) ").unwrap()); } }