asdi 0.2.5

Another Simplistic Datalog Implementation (in Rust)
Documentation
@startuml

!include options.plantuml

class asdi::features::FeatureSet
hide "asdi::features::FeatureSet" members

class asdi::edb::RelationSet
hide "asdi::edb::RelationSet" members

class asdi::edb::NameReferenceSet
hide "asdi::edb::NameReferenceSet" members

class asdi::idb::RuleSet
hide "asdi::idb::RuleSet" members

class asdi::idb::query::QuerySet
hide "asdi::idb::query::QuerySet" members

namespace asdi {

    interface MaybePositive {
        is_positive() : bool
        is_negative() : bool
    }

    interface ProgramCore {
        features() : &FeatureSet
        extensional() : &RelationSet
        intensional() : &RelationSet
        rules() : &RuleSet
    }

    ProgramCore .up.> asdi::features::FeatureSet
    ProgramCore .up.> "extensional" asdi::edb::RelationSet
    ProgramCore .up.> "intensional" asdi::edb::RelationSet
    ProgramCore .up.> asdi::idb::RuleSet

    class Program {
        new_with_features(FeatureSet) : Self
        source_file_path() : Option<&PathBuf>
        == interned ==
        predicates() : &NameReferenceSet<Predicate>
        variables() : &NameReferenceSet<Variable>
        == edb ==
        extensional_mut() : &mut RelationSet
        add_new_extensional_relation(PredicateRef, Schema<Predicate>) : Result<&mut Relation>
        add_extensional_relation(Relation)
        load_extensional_data() : Result<()>
        == idb ==
        intensional_mut() : &mut RelationSet
        add_new_intensional_relation(PredicateRef, Schema<Predicate>) : Result<&mut Relation>
        add_intensional_relation(Relation)
        store_intensional_data() : Result<()>
        add_new_pure_rule(PredicateRef, Vec<Term>, Vec<Literal>) : Result<bool>
        add_new_constraint_rule(Vec<Literal>) : Result<bool>
        add_new_disjunctive_rule(Vec<Atom>, Vec<Literal>) : Result<bool>
        add_rule(Rule) : Result<bool>
        add_new_query(Predicate, Vec<Term>) : Result<bool>
        add_query(Query) : Result<bool>
        == queries ==
        queries(&self) -> &QuerySet
        == predicates ==
        is_recursive() : bool
        is_semi_positive() : bool
        is_linear() : bool
        is_guarded() : bool
        is_frontier_guarded() : bool
        == evaluation ==
        run(Evaluator, bool) : Result<()>
        eval_query(&Query) : Result<Option<View>>
        eval_query_with(&Query, Evaluator) : Result<Option<View>>
        eval_queries() : Result<Vec<(&Query, Option<View>)>>
        eval_queries_with(Evaluator) : Result<Vec<(&Query, Option<View>)>>
        == crate ==
        - set_source_file_path(PathBuf)
        - features_mut() : &mut FeatureSet
    }

    Program ..|> ProgramCore
    Program ..|> MaybePositive
    Program *--> "predicates" asdi::edb::NameReferenceSet
    Program *--> "variables" asdi::edb::NameReferenceSet
    Program *--> asdi::idb::query::QuerySet

}

@enduml