nova_interpreter/parser/
ruleset.rs1#[derive(Debug, Clone)]
2pub struct Rule {
3 pub conditions: Box<[(usize, usize)]>,
4 pub multiplicities: Box<[(usize, usize)]>,
5}
6
7impl Rule {
8 pub fn is_fact(&self) -> bool {
9 self.conditions.len() == 0
10 }
11
12 pub fn is_rule(&self) -> bool {
13 !self.is_fact()
14 }
15}
16
17#[derive(Debug, Clone)]
18pub struct RuleSet {
19 pub rules: Vec<Rule>,
20 pub facts: Vec<Rule>,
21}
22
23#[derive(Debug, Clone)]
24pub struct BakedRuleset {
25 pub rules: Box<[Rule]>,
26 pub facts: Box<[Rule]>,
27}
28
29impl From<RuleSet> for BakedRuleset {
30 fn from(value: RuleSet) -> Self {
31 BakedRuleset {
32 rules: value.rules.into_boxed_slice(),
33 facts: value.facts.into_boxed_slice(),
34 }
35 }
36}
37
38impl RuleSet {
39 pub fn empty() -> RuleSet {
40 RuleSet {
41 rules: vec![],
42 facts: vec![],
43 }
44 }
45}
46
47impl std::ops::AddAssign for RuleSet {
48 fn add_assign(&mut self, mut rhs: Self) {
49 self.rules.append(&mut rhs.rules);
50 self.facts.append(&mut rhs.facts);
51 }
52}