///|
/// Count the rule node and all nested sequence nodes.
pub fn DateRule::node_count(self : DateRule) -> Int {
match self {
Sequence(rules) =>
1 + rules.fold(init=0, (total, rule) => total + rule.node_count())
_ => 1
}
}
///|
/// Return the maximum nested sequence depth, with a leaf at depth zero.
pub fn DateRule::max_depth(self : DateRule) -> Int {
match self {
Sequence(rules) => {
let mut deepest = 0
for rule in rules {
deepest = Int::max(deepest, rule.max_depth() + 1)
}
deepest
}
_ => 0
}
}
///|
/// Check whether a rule tree includes a business-day operation.
pub fn DateRule::uses_business_days(self : DateRule) -> Bool {
match self {
BusinessDays(_) => true
Sequence(rules) => {
for rule in rules {
if rule.uses_business_days() {
return true
}
}
false
}
_ => false
}
}