pub trait Unital: Magma {
// Required method
fn unit() -> Self::T;
// Provided methods
fn is_unit(x: &Self::T) -> bool
where Self::T: PartialEq { ... }
fn set_unit(x: &mut Self::T) { ... }
}Expand description
$\exists e \in T, \forall a \in T, e \circ a = a \circ e = e$
Required Methods§
Provided Methods§
Sourcefn is_unit(x: &Self::T) -> bool
fn is_unit(x: &Self::T) -> bool
Examples found in repository?
More examples
crates/competitive/src/data_structure/dual_segment_tree.rs (line 73)
71 fn propagate_at(&mut self, k: usize) {
72 let a = replace(&mut self.lazy[k], M::unit());
73 if !M::ActMonoid::is_unit(&a) {
74 self.update_at(2 * k, &a);
75 self.update_at(2 * k + 1, &a);
76 }
77 }
78 pub fn update<R>(&mut self, range: R, a: M::Act)
79 where
80 R: RangeBounds<usize>,
81 {
82 let range = range
83 .to_range_bounded(0, self.keys.len())
84 .expect("invalid range");
85 if range.is_empty() || M::ActMonoid::is_unit(&a) {
86 return;
87 }
88 let mut l = range.start + self.n;
89 let mut r = range.end + self.n;
90 for i in (1..=self.n.trailing_zeros()).rev() {
91 if (l >> i) << i != l {
92 self.propagate_at(l >> i);
93 }
94 if (r >> i) << i != r && ((l >> i) << i == l || l >> i != (r - 1) >> i) {
95 self.propagate_at((r - 1) >> i);
96 }
97 }
98 while l < r {
99 if l & 1 != 0 {
100 self.update_at(l, &a);
101 l += 1;
102 }
103 if r & 1 != 0 {
104 r -= 1;
105 self.update_at(r, &a);
106 }
107 l >>= 1;
108 r >>= 1;
109 }
110 }fn set_unit(x: &mut Self::T)
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety".