Skip to main content

UnaryRelation

Struct UnaryRelation 

Source
pub struct UnaryRelation<T: Ord> { /* private fields */ }
Expand description

Finite unary relation type. A finite unary relation.

UnaryRelation<T> remains the exact unary relation surface. Current carrier-sensitive exact APIs still accept UnaryRelation<T> arguments for compatibility, but G7 introduces crate::FiniteCarrier as the explicit carrier boundary when a declared domain should stay distinct from support inferred from stored tuples.

The starter implementation uses BTreeSet so iteration order is deterministic.

§Examples

use relmath::{FiniteRelation, UnaryRelation};

let mut xs = UnaryRelation::new();
assert!(xs.is_empty());

xs.insert(3);
xs.insert(1);
xs.insert(2);
xs.insert(2);

let ys = UnaryRelation::singleton(3);
let zs = UnaryRelation::from_values([2, 3, 4]);

assert!(xs.contains(&1));
assert_eq!(xs.iter().copied().collect::<Vec<_>>(), vec![1, 2, 3]);
assert_eq!(xs.union(&ys).to_vec(), vec![1, 2, 3]);
assert_eq!(xs.intersection(&zs).to_vec(), vec![2, 3]);
assert_eq!(xs.difference(&zs).to_vec(), vec![1]);
assert!(ys.is_subset(&xs));

Implementations§

Source§

impl<T: Ord> UnaryRelation<T>

Source

pub fn new() -> Self

Creates an empty unary relation.

Source

pub fn from_values<I>(values: I) -> Self
where I: IntoIterator<Item = T>,

Creates a unary relation from the provided values.

Duplicate values are coalesced into a single stored element.

Examples found in repository?
examples/workflow.rs (line 13)
5fn main() {
6    let step = BinaryRelation::from_pairs([
7        ("Draft", "Review"),
8        ("Review", "Approved"),
9        ("Review", "Rejected"),
10    ]);
11
12    let states =
13        UnaryRelation::from_values(["Draft", "Review", "Approved", "Rejected", "Archived"]);
14    let reachable = step.reflexive_transitive_closure(&states);
15    let draft = UnaryRelation::singleton("Draft");
16
17    assert!(reachable.contains(&"Archived", &"Archived"));
18    assert!(reachable.contains(&"Draft", &"Approved"));
19
20    println!(
21        "reachable from Draft: {:?}",
22        reachable.image(&draft).to_vec()
23    );
24}
More examples
Hide additional examples
examples/family.rs (line 14)
5fn main() {
6    let parent = BinaryRelation::from_pairs([
7        ("Ada", "Bob"),
8        ("Ada", "Cara"),
9        ("Bob", "Dana"),
10        ("Cara", "Eli"),
11        ("Dana", "Finn"),
12    ]);
13
14    let people = UnaryRelation::from_values(["Ada", "Bob", "Cara", "Dana", "Eli", "Finn"]);
15    let grandparent = parent.compose(&parent);
16    let ancestor = parent.reflexive_transitive_closure(&people);
17
18    let ada = UnaryRelation::singleton("Ada");
19    let reachable_from_ada = ancestor.image(&ada);
20
21    assert!(grandparent.contains(&"Ada", &"Dana"));
22    assert!(grandparent.contains(&"Ada", &"Eli"));
23    assert!(reachable_from_ada.contains(&"Finn"));
24
25    println!("grandparent pairs: {:?}", grandparent.to_vec());
26    println!(
27        "people reachable from Ada: {:?}",
28        reachable_from_ada.to_vec()
29    );
30}
examples/relation_view.rs (line 10)
9fn main() -> Result<(), relmath::NaryRelationError> {
10    let people = UnaryRelation::from_values(["Ada", "Bob"]);
11    let parent = BinaryRelation::from_pairs([("Ada", "Bob"), ("Bob", "Cara")]);
12    let enrollments =
13        NaryRelation::from_rows(["student", "course"], [["Ada", "Math"], ["Bob", "Physics"]])?;
14
15    assert_eq!(tuple_count(&people), 2);
16    assert_eq!(tuple_count(&parent), 2);
17    assert_eq!(tuple_count(&enrollments), 2);
18
19    assert_eq!(
20        people.tuples().copied().collect::<Vec<_>>(),
21        vec!["Ada", "Bob"]
22    );
23    assert_eq!(
24        parent.tuples().copied().collect::<Vec<_>>(),
25        vec![("Ada", "Bob"), ("Bob", "Cara")]
26    );
27    assert_eq!(
28        enrollments
29            .tuples()
30            .map(|row| row.to_vec())
31            .collect::<Vec<_>>(),
32        vec![vec!["Ada", "Math"], vec!["Bob", "Physics"]]
33    );
34
35    println!("people: {:?}", people.tuples().copied().collect::<Vec<_>>());
36    println!("parent: {:?}", parent.tuples().copied().collect::<Vec<_>>());
37    println!(
38        "enrollments: {:?}",
39        enrollments
40            .tuples()
41            .map(|row| row.to_vec())
42            .collect::<Vec<_>>()
43    );
44
45    Ok(())
46}
Source

pub fn singleton(value: T) -> Self

Creates a unary relation containing exactly one value.

Examples found in repository?
examples/workflow.rs (line 15)
5fn main() {
6    let step = BinaryRelation::from_pairs([
7        ("Draft", "Review"),
8        ("Review", "Approved"),
9        ("Review", "Rejected"),
10    ]);
11
12    let states =
13        UnaryRelation::from_values(["Draft", "Review", "Approved", "Rejected", "Archived"]);
14    let reachable = step.reflexive_transitive_closure(&states);
15    let draft = UnaryRelation::singleton("Draft");
16
17    assert!(reachable.contains(&"Archived", &"Archived"));
18    assert!(reachable.contains(&"Draft", &"Approved"));
19
20    println!(
21        "reachable from Draft: {:?}",
22        reachable.image(&draft).to_vec()
23    );
24}
More examples
Hide additional examples
examples/family.rs (line 18)
5fn main() {
6    let parent = BinaryRelation::from_pairs([
7        ("Ada", "Bob"),
8        ("Ada", "Cara"),
9        ("Bob", "Dana"),
10        ("Cara", "Eli"),
11        ("Dana", "Finn"),
12    ]);
13
14    let people = UnaryRelation::from_values(["Ada", "Bob", "Cara", "Dana", "Eli", "Finn"]);
15    let grandparent = parent.compose(&parent);
16    let ancestor = parent.reflexive_transitive_closure(&people);
17
18    let ada = UnaryRelation::singleton("Ada");
19    let reachable_from_ada = ancestor.image(&ada);
20
21    assert!(grandparent.contains(&"Ada", &"Dana"));
22    assert!(grandparent.contains(&"Ada", &"Eli"));
23    assert!(reachable_from_ada.contains(&"Finn"));
24
25    println!("grandparent pairs: {:?}", grandparent.to_vec());
26    println!(
27        "people reachable from Ada: {:?}",
28        reachable_from_ada.to_vec()
29    );
30}
examples/access_control.rs (line 23)
5fn main() {
6    let user_role = BinaryRelation::from_pairs([
7        ("ann", "admin"),
8        ("bob", "analyst"),
9        ("bob", "reviewer"),
10        ("cara", "guest"),
11    ]);
12
13    let role_permission = BinaryRelation::from_pairs([
14        ("admin", "read"),
15        ("admin", "write"),
16        ("admin", "deploy"),
17        ("analyst", "read"),
18        ("reviewer", "approve"),
19        ("guest", "read"),
20    ]);
21
22    let effective_permission = user_role.compose(&role_permission);
23    let bob = UnaryRelation::singleton("bob");
24    let bob_permissions = effective_permission.image(&bob);
25
26    assert!(effective_permission.contains(&"ann", &"deploy"));
27    assert!(bob_permissions.contains(&"approve"));
28    assert!(bob_permissions.contains(&"read"));
29
30    println!(
31        "effective permissions for bob: {:?}",
32        bob_permissions.to_vec()
33    );
34}
examples/annotated.rs (line 38)
29fn main() {
30    let confirmations = AnnotatedRelation::from_facts([
31        (("Alice", "Math"), SupportCount(1)),
32        (("Alice", "Math"), SupportCount(1)),
33        (("Bob", "Physics"), SupportCount(1)),
34        (("Cara", "Logic"), SupportCount::zero()),
35    ]);
36
37    let exact_completed = confirmations.to_binary_relation();
38    let alice = UnaryRelation::singleton("Alice");
39
40    assert_eq!(
41        confirmations.annotation_of(&("Alice", "Math")),
42        Some(&SupportCount(2))
43    );
44    assert_eq!(exact_completed.image(&alice).to_vec(), vec!["Math"]);
45    assert!(!confirmations.contains_fact(&("Cara", "Logic")));
46    assert_eq!(
47        confirmations
48            .iter()
49            .map(|(fact, count)| (*fact, count.0))
50            .collect::<Vec<_>>(),
51        vec![(("Alice", "Math"), 2), (("Bob", "Physics"), 1)]
52    );
53
54    println!(
55        "stored support counts: {:?}",
56        confirmations
57            .iter()
58            .map(|(fact, count)| (*fact, count.0))
59            .collect::<Vec<_>>()
60    );
61}
examples/provenance.rs (line 19)
5fn main() {
6    let gene_disease = ProvenanceRelation::from_facts([
7        (("BRCA1", "BreastCancer"), "curated_panel"),
8        (("BRCA1", "BreastCancer"), "paper_12"),
9        (("TP53", "BreastCancer"), "paper_77"),
10    ]);
11
12    let disease_drug = relmath::BinaryRelation::from_pairs([
13        ("BreastCancer", "Olaparib"),
14        ("BreastCancer", "Tamoxifen"),
15    ]);
16
17    let supported_gene_disease = gene_disease.to_binary_relation();
18    let gene_drug = supported_gene_disease.compose(&disease_drug);
19    let brca1 = UnaryRelation::singleton("BRCA1");
20    let brca1_witness = gene_disease
21        .why(&("BRCA1", "BreastCancer"))
22        .expect("expected explanation");
23
24    assert_eq!(
25        gene_drug.image(&brca1).to_vec(),
26        vec!["Olaparib", "Tamoxifen"]
27    );
28    assert_eq!(brca1_witness.to_vec(), vec!["curated_panel", "paper_12"]);
29    assert!(brca1_witness.contains_token(&"paper_12"));
30    assert_eq!(
31        gene_disease
32            .provenance_of(&("BRCA1", "BreastCancer"))
33            .expect("expected explanation")
34            .to_vec(),
35        brca1_witness.to_vec()
36    );
37    assert_eq!(
38        gene_disease.support().to_vec(),
39        vec![("BRCA1", "BreastCancer"), ("TP53", "BreastCancer")]
40    );
41    assert!(gene_disease.why(&("BRCA1", "Olaparib")).is_none());
42
43    println!(
44        "why BRCA1 links to BreastCancer in the base evidence: {:?}",
45        brca1_witness.to_vec()
46    );
47}
examples/valid_time.rs (line 24)
8fn main() {
9    let assignments = ValidTimeRelation::from_facts([
10        (
11            ("alice", "review"),
12            Interval::new(1, 3).expect("expected valid interval"),
13        ),
14        (
15            ("alice", "review"),
16            Interval::new(3, 5).expect("expected valid interval"),
17        ),
18        (
19            ("bob", "approve"),
20            Interval::new(2, 4).expect("expected valid interval"),
21        ),
22    ]);
23
24    let alice = UnaryRelation::singleton("alice");
25    let fact_support = assignments.support();
26    let exact_support = assignments.to_binary_relation();
27    let audit_window = Interval::new(2, 4).expect("expected valid interval");
28    let active_at_three = assignments.snapshot_at(&3);
29    let audit_assignments = assignments.restrict_to(&audit_window);
30
31    assert_eq!(
32        assignments
33            .valid_time_of(&("alice", "review"))
34            .expect("expected support")
35            .to_vec(),
36        vec![Interval::new(1, 5).expect("expected valid interval")]
37    );
38    assert!(assignments.is_active_at(&("alice", "review"), &4));
39    assert!(!assignments.is_active_at(&("alice", "review"), &5));
40    assert_eq!(
41        active_at_three.to_vec(),
42        vec![("alice", "review"), ("bob", "approve")]
43    );
44    assert_eq!(
45        fact_support.to_vec(),
46        vec![("alice", "review"), ("bob", "approve")]
47    );
48    assert_eq!(
49        audit_assignments
50            .valid_time_of(&("alice", "review"))
51            .expect("expected support")
52            .to_vec(),
53        vec![Interval::new(2, 4).expect("expected valid interval")]
54    );
55    assert_eq!(
56        audit_assignments.to_binary_relation().to_vec(),
57        vec![("alice", "review"), ("bob", "approve")]
58    );
59    assert_eq!(exact_support.image(&alice).to_vec(), vec!["review"]);
60
61    println!(
62        "fact support: {:?}; active at t=3: {:?}; audit restriction: {:?}",
63        fact_support.to_vec(),
64        active_at_three.to_vec(),
65        audit_assignments
66            .valid_time_of(&("alice", "review"))
67            .expect("expected support")
68            .to_vec()
69    );
70}
Source

pub fn insert(&mut self, value: T) -> bool

Inserts a value into the unary relation.

Returns true when the value was not already present.

Source

pub fn contains(&self, value: &T) -> bool

Returns true when the unary relation contains the given value.

Examples found in repository?
examples/family.rs (line 23)
5fn main() {
6    let parent = BinaryRelation::from_pairs([
7        ("Ada", "Bob"),
8        ("Ada", "Cara"),
9        ("Bob", "Dana"),
10        ("Cara", "Eli"),
11        ("Dana", "Finn"),
12    ]);
13
14    let people = UnaryRelation::from_values(["Ada", "Bob", "Cara", "Dana", "Eli", "Finn"]);
15    let grandparent = parent.compose(&parent);
16    let ancestor = parent.reflexive_transitive_closure(&people);
17
18    let ada = UnaryRelation::singleton("Ada");
19    let reachable_from_ada = ancestor.image(&ada);
20
21    assert!(grandparent.contains(&"Ada", &"Dana"));
22    assert!(grandparent.contains(&"Ada", &"Eli"));
23    assert!(reachable_from_ada.contains(&"Finn"));
24
25    println!("grandparent pairs: {:?}", grandparent.to_vec());
26    println!(
27        "people reachable from Ada: {:?}",
28        reachable_from_ada.to_vec()
29    );
30}
More examples
Hide additional examples
examples/access_control.rs (line 27)
5fn main() {
6    let user_role = BinaryRelation::from_pairs([
7        ("ann", "admin"),
8        ("bob", "analyst"),
9        ("bob", "reviewer"),
10        ("cara", "guest"),
11    ]);
12
13    let role_permission = BinaryRelation::from_pairs([
14        ("admin", "read"),
15        ("admin", "write"),
16        ("admin", "deploy"),
17        ("analyst", "read"),
18        ("reviewer", "approve"),
19        ("guest", "read"),
20    ]);
21
22    let effective_permission = user_role.compose(&role_permission);
23    let bob = UnaryRelation::singleton("bob");
24    let bob_permissions = effective_permission.image(&bob);
25
26    assert!(effective_permission.contains(&"ann", &"deploy"));
27    assert!(bob_permissions.contains(&"approve"));
28    assert!(bob_permissions.contains(&"read"));
29
30    println!(
31        "effective permissions for bob: {:?}",
32        bob_permissions.to_vec()
33    );
34}
Source

pub fn iter(&self) -> impl Iterator<Item = &T>

Returns an iterator over the values in deterministic order.

Iteration order follows T: Ord.

Source

pub fn union(&self, other: &Self) -> Self
where T: Clone,

Returns the union of self and other.

Source

pub fn intersection(&self, other: &Self) -> Self
where T: Clone,

Returns the intersection of self and other.

Source

pub fn difference(&self, other: &Self) -> Self
where T: Clone,

Returns the set difference self \ other.

Source

pub fn is_subset(&self, other: &Self) -> bool

Returns true when every element of self also appears in other.

Source

pub fn to_vec(&self) -> Vec<T>
where T: Clone,

Converts the unary relation into a sorted vector.

Examples found in repository?
examples/capability_boundaries.rs (line 16)
10fn exact_pairs<R>(relation: &R) -> BinaryRelation<&'static str, &'static str>
11where
12    R: ExactSupport<(&'static str, &'static str)>
13        + ToExactBinaryRelation<&'static str, &'static str>,
14{
15    assert_eq!(
16        relation.exact_support().to_vec(),
17        relation.to_binary_relation().to_vec()
18    );
19    relation.to_binary_relation()
20}
More examples
Hide additional examples
examples/workflow.rs (line 22)
5fn main() {
6    let step = BinaryRelation::from_pairs([
7        ("Draft", "Review"),
8        ("Review", "Approved"),
9        ("Review", "Rejected"),
10    ]);
11
12    let states =
13        UnaryRelation::from_values(["Draft", "Review", "Approved", "Rejected", "Archived"]);
14    let reachable = step.reflexive_transitive_closure(&states);
15    let draft = UnaryRelation::singleton("Draft");
16
17    assert!(reachable.contains(&"Archived", &"Archived"));
18    assert!(reachable.contains(&"Draft", &"Approved"));
19
20    println!(
21        "reachable from Draft: {:?}",
22        reachable.image(&draft).to_vec()
23    );
24}
examples/family.rs (line 28)
5fn main() {
6    let parent = BinaryRelation::from_pairs([
7        ("Ada", "Bob"),
8        ("Ada", "Cara"),
9        ("Bob", "Dana"),
10        ("Cara", "Eli"),
11        ("Dana", "Finn"),
12    ]);
13
14    let people = UnaryRelation::from_values(["Ada", "Bob", "Cara", "Dana", "Eli", "Finn"]);
15    let grandparent = parent.compose(&parent);
16    let ancestor = parent.reflexive_transitive_closure(&people);
17
18    let ada = UnaryRelation::singleton("Ada");
19    let reachable_from_ada = ancestor.image(&ada);
20
21    assert!(grandparent.contains(&"Ada", &"Dana"));
22    assert!(grandparent.contains(&"Ada", &"Eli"));
23    assert!(reachable_from_ada.contains(&"Finn"));
24
25    println!("grandparent pairs: {:?}", grandparent.to_vec());
26    println!(
27        "people reachable from Ada: {:?}",
28        reachable_from_ada.to_vec()
29    );
30}
examples/access_control.rs (line 32)
5fn main() {
6    let user_role = BinaryRelation::from_pairs([
7        ("ann", "admin"),
8        ("bob", "analyst"),
9        ("bob", "reviewer"),
10        ("cara", "guest"),
11    ]);
12
13    let role_permission = BinaryRelation::from_pairs([
14        ("admin", "read"),
15        ("admin", "write"),
16        ("admin", "deploy"),
17        ("analyst", "read"),
18        ("reviewer", "approve"),
19        ("guest", "read"),
20    ]);
21
22    let effective_permission = user_role.compose(&role_permission);
23    let bob = UnaryRelation::singleton("bob");
24    let bob_permissions = effective_permission.image(&bob);
25
26    assert!(effective_permission.contains(&"ann", &"deploy"));
27    assert!(bob_permissions.contains(&"approve"));
28    assert!(bob_permissions.contains(&"read"));
29
30    println!(
31        "effective permissions for bob: {:?}",
32        bob_permissions.to_vec()
33    );
34}
examples/annotated.rs (line 44)
29fn main() {
30    let confirmations = AnnotatedRelation::from_facts([
31        (("Alice", "Math"), SupportCount(1)),
32        (("Alice", "Math"), SupportCount(1)),
33        (("Bob", "Physics"), SupportCount(1)),
34        (("Cara", "Logic"), SupportCount::zero()),
35    ]);
36
37    let exact_completed = confirmations.to_binary_relation();
38    let alice = UnaryRelation::singleton("Alice");
39
40    assert_eq!(
41        confirmations.annotation_of(&("Alice", "Math")),
42        Some(&SupportCount(2))
43    );
44    assert_eq!(exact_completed.image(&alice).to_vec(), vec!["Math"]);
45    assert!(!confirmations.contains_fact(&("Cara", "Logic")));
46    assert_eq!(
47        confirmations
48            .iter()
49            .map(|(fact, count)| (*fact, count.0))
50            .collect::<Vec<_>>(),
51        vec![(("Alice", "Math"), 2), (("Bob", "Physics"), 1)]
52    );
53
54    println!(
55        "stored support counts: {:?}",
56        confirmations
57            .iter()
58            .map(|(fact, count)| (*fact, count.0))
59            .collect::<Vec<_>>()
60    );
61}
examples/provenance.rs (line 25)
5fn main() {
6    let gene_disease = ProvenanceRelation::from_facts([
7        (("BRCA1", "BreastCancer"), "curated_panel"),
8        (("BRCA1", "BreastCancer"), "paper_12"),
9        (("TP53", "BreastCancer"), "paper_77"),
10    ]);
11
12    let disease_drug = relmath::BinaryRelation::from_pairs([
13        ("BreastCancer", "Olaparib"),
14        ("BreastCancer", "Tamoxifen"),
15    ]);
16
17    let supported_gene_disease = gene_disease.to_binary_relation();
18    let gene_drug = supported_gene_disease.compose(&disease_drug);
19    let brca1 = UnaryRelation::singleton("BRCA1");
20    let brca1_witness = gene_disease
21        .why(&("BRCA1", "BreastCancer"))
22        .expect("expected explanation");
23
24    assert_eq!(
25        gene_drug.image(&brca1).to_vec(),
26        vec!["Olaparib", "Tamoxifen"]
27    );
28    assert_eq!(brca1_witness.to_vec(), vec!["curated_panel", "paper_12"]);
29    assert!(brca1_witness.contains_token(&"paper_12"));
30    assert_eq!(
31        gene_disease
32            .provenance_of(&("BRCA1", "BreastCancer"))
33            .expect("expected explanation")
34            .to_vec(),
35        brca1_witness.to_vec()
36    );
37    assert_eq!(
38        gene_disease.support().to_vec(),
39        vec![("BRCA1", "BreastCancer"), ("TP53", "BreastCancer")]
40    );
41    assert!(gene_disease.why(&("BRCA1", "Olaparib")).is_none());
42
43    println!(
44        "why BRCA1 links to BreastCancer in the base evidence: {:?}",
45        brca1_witness.to_vec()
46    );
47}

Trait Implementations§

Source§

impl<T: Clone + Ord> Clone for UnaryRelation<T>

Source§

fn clone(&self) -> UnaryRelation<T>

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl<T: Debug + Ord> Debug for UnaryRelation<T>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<T: Ord> Default for UnaryRelation<T>

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl<T: Ord> Extend<T> for UnaryRelation<T>

Source§

fn extend<I: IntoIterator<Item = T>>(&mut self, iter: I)

Extends a collection with the contents of an iterator. Read more
Source§

fn extend_one(&mut self, item: A)

🔬This is a nightly-only experimental API. (extend_one)
Extends a collection with exactly one element.
Source§

fn extend_reserve(&mut self, additional: usize)

🔬This is a nightly-only experimental API. (extend_one)
Reserves capacity in a collection for the given number of additional elements. Read more
Source§

impl<T: Ord> FiniteRelation for UnaryRelation<T>

Source§

fn len(&self) -> usize

Returns the number of stored tuples in the relation.
Source§

fn is_empty(&self) -> bool

Returns true when the relation contains no tuples.
Source§

impl<T: Ord> FromIterator<T> for UnaryRelation<T>

Source§

fn from_iter<I: IntoIterator<Item = T>>(iter: I) -> Self

Creates a value from an iterator. Read more
Source§

impl<'a, T: Ord> IntoIterator for &'a UnaryRelation<T>

Source§

type Item = &'a T

The type of the elements being iterated over.
Source§

type IntoIter = Iter<'a, T>

Which kind of iterator are we turning this into?
Source§

fn into_iter(self) -> Self::IntoIter

Creates an iterator from a value. Read more
Source§

impl<T: Ord> IntoIterator for UnaryRelation<T>

Source§

type Item = T

The type of the elements being iterated over.
Source§

type IntoIter = IntoIter<T>

Which kind of iterator are we turning this into?
Source§

fn into_iter(self) -> Self::IntoIter

Creates an iterator from a value. Read more
Source§

impl<T: PartialEq + Ord> PartialEq for UnaryRelation<T>

Source§

fn eq(&self, other: &UnaryRelation<T>) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl<T: Ord> RelationView for UnaryRelation<T>

Source§

type Tuple<'a> = &'a T where Self: 'a

Borrowed tuple item yielded by Self::tuples.
Source§

fn tuples(&self) -> impl Iterator<Item = Self::Tuple<'_>>

Returns the stored tuples in deterministic order.
Source§

impl<T: Eq + Ord> Eq for UnaryRelation<T>

Source§

impl<T: Ord> StructuralPartialEq for UnaryRelation<T>

Auto Trait Implementations§

§

impl<T> Freeze for UnaryRelation<T>

§

impl<T> RefUnwindSafe for UnaryRelation<T>
where T: RefUnwindSafe,

§

impl<T> Send for UnaryRelation<T>
where T: Send,

§

impl<T> Sync for UnaryRelation<T>
where T: Sync,

§

impl<T> Unpin for UnaryRelation<T>

§

impl<T> UnsafeUnpin for UnaryRelation<T>

§

impl<T> UnwindSafe for UnaryRelation<T>
where T: RefUnwindSafe,

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.