@startuml
!include options.plantuml
class std::rc::Rc
hide "std::rc::Rc" members
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 AttributeName {
is_valid(s: &str) : bool
type_name() : &str
}
interface Collection<T> {
is_empty() : bool
len() : usize
iter() : Iterator<&T>
contains(v: &T) : bool
}
interface IndexedCollection<K,V> {
get(index: &K) : Option<V>
contains_index(index: &K) : bool
}
interface Labeled {
label() : Predicate
label_ref() : PredicateRef
}
interface MaybeAnonymous {
anonymous() : Self
is_anonymous() : bool
}
interface MaybePositive {
is_positive() : bool
is_negative() : bool
}
interface ProgramCore {
features() : &FeatureSet
extensional() : &RelationSet
intensional() : &RelationSet
rules() : &RuleSet
}
IndexedCollection --|> Collection
class Program
Program ..|> ProgramCore
Program ..|> MaybePositive
Program *-up-> asdi::features::FeatureSet
Program *-up-> "extensional" asdi::edb::RelationSet
Program *-up-> "intensional" asdi::edb::RelationSet
Program *-up-> "predicates" asdi::edb::NameReferenceSet
Program *-up-> "variables" asdi::edb::NameReferenceSet
Program *-up-> asdi::idb::RuleSet
Program *-up-> asdi::idb::query::QuerySet
class AttributeNameRef<T: AttributeName> << (T,#ADD1B2) type>>
AttributeNameRef .up.> std::rc::Rc : base
AttributeNameRef o-down-> AttributeName
}
@enduml