pub struct ConditionExprEvaluator<'a, E: ConditionEvaluator> { /* private fields */ }Expand description
Evaluates a ConditionExpr AST against an evaluation context.
Uses three-valued short-circuit logic:
- AND: False short-circuits to False; all True -> True; else Unknown
- OR: True short-circuits to True; all False -> False; else Unknown
- XOR: requires both operands known; Unknown if either is Unknown
- NOT: inverts True/False; preserves Unknown
Implementations§
Source§impl<'a, E: ConditionEvaluator> ConditionExprEvaluator<'a, E>
impl<'a, E: ConditionEvaluator> ConditionExprEvaluator<'a, E>
Sourcepub fn new(evaluator: &'a E) -> Self
pub fn new(evaluator: &'a E) -> Self
Create a new expression evaluator wrapping a condition evaluator.
Sourcepub fn evaluate(
&self,
expr: &ConditionExpr,
ctx: &EvaluationContext<'_>,
) -> ConditionResult
pub fn evaluate( &self, expr: &ConditionExpr, ctx: &EvaluationContext<'_>, ) -> ConditionResult
Evaluate a condition expression tree.
Sourcepub fn evaluate_status(
&self,
ahb_status: &str,
ctx: &EvaluationContext<'_>,
) -> ConditionResult
pub fn evaluate_status( &self, ahb_status: &str, ctx: &EvaluationContext<'_>, ) -> ConditionResult
Parse an AHB status string, evaluate it, and return the result.
Returns ConditionResult::True if there are no conditions (unconditionally required).
Sourcepub fn evaluate_status_with_ub(
&self,
ahb_status: &str,
ctx: &EvaluationContext<'_>,
ub_definitions: &BTreeMap<String, ConditionExpr>,
) -> ConditionResult
pub fn evaluate_status_with_ub( &self, ahb_status: &str, ctx: &EvaluationContext<'_>, ub_definitions: &BTreeMap<String, ConditionExpr>, ) -> ConditionResult
Like evaluate_status, but expands UB condition
references inline during parsing.
Sourcepub fn evaluate_status_detailed(
&self,
ahb_status: &str,
ctx: &EvaluationContext<'_>,
) -> (ConditionResult, Vec<u32>)
pub fn evaluate_status_detailed( &self, ahb_status: &str, ctx: &EvaluationContext<'_>, ) -> (ConditionResult, Vec<u32>)
Like evaluate_status, but also returns the
IDs of conditions that evaluated to Unknown.
Sourcepub fn evaluate_status_detailed_with_ub(
&self,
ahb_status: &str,
ctx: &EvaluationContext<'_>,
ub_definitions: &BTreeMap<String, ConditionExpr>,
) -> (ConditionResult, Vec<u32>)
pub fn evaluate_status_detailed_with_ub( &self, ahb_status: &str, ctx: &EvaluationContext<'_>, ub_definitions: &BTreeMap<String, ConditionExpr>, ) -> (ConditionResult, Vec<u32>)
Like evaluate_status_detailed, but
expands UB condition references inline during parsing.
Sourcepub fn resolve_status(
&self,
ahb_status: &str,
ctx: &EvaluationContext<'_>,
ub_definitions: &BTreeMap<String, ConditionExpr>,
) -> StatusResolution
pub fn resolve_status( &self, ahb_status: &str, ctx: &EvaluationContext<'_>, ub_definitions: &BTreeMap<String, ConditionExpr>, ) -> StatusResolution
Decide which status of an AHB status applies.
A status can carry several lines (Muss [2119] over Soll [130]). The
strictest line whose condition holds applies — Muss over Soll over
Kann, whatever the order. A line whose condition is unknown blocks the
decision only if it is stricter than that: then the answer could change,
and the result is Unknown. A line without a condition always holds.
A single-line status resolves to its own status word and the result of
its condition, as evaluate_status_detailed_with_ub gives it.