pub struct RcBiPredicate<T, U> { /* private fields */ }Expand description
An Rc-based bi-predicate with single-threaded shared ownership.
This type is suitable for scenarios where the bi-predicate needs
to be reused in a single-threaded context. Composition methods
borrow &self, allowing the original bi-predicate to remain
usable after composition.
§Examples
use qubit_function::{BiPredicate, RcBiPredicate};
let pred = RcBiPredicate::new(|x: &i32, y: &i32| x + y > 0);
assert!(pred.test(&5, &3));
// Original bi-predicate remains usable after composition
let combined = pred.and(RcBiPredicate::new(|x, y| x > y));
assert!(pred.test(&5, &3)); // Still worksImplementations§
Source§impl<T, U> RcBiPredicate<T, U>
impl<T, U> RcBiPredicate<T, U>
Sourcepub fn new<F>(f: F) -> Self
pub fn new<F>(f: F) -> Self
Creates a new bi-predicate.
Wraps the provided closure in the appropriate smart pointer type for this bi-predicate implementation.
Sourcepub fn new_with_name<F>(name: &str, f: F) -> Self
pub fn new_with_name<F>(name: &str, f: F) -> Self
Creates a new named bi-predicate.
Wraps the provided closure and assigns it a name, which is useful for debugging and logging purposes.
Sourcepub fn new_with_optional_name<F>(f: F, name: Option<String>) -> Self
pub fn new_with_optional_name<F>(f: F, name: Option<String>) -> Self
Creates a new named bi-predicate with an optional name.
Wraps the provided closure and assigns it an optional name.
Sourcepub fn name(&self) -> Option<&str>
pub fn name(&self) -> Option<&str>
Examples found in repository?
17fn main() {
18 println!("=== BoxBiPredicate always_true/always_false Demo ===\n");
19
20 // BoxBiPredicate::always_true
21 let always_true: BoxBiPredicate<i32, i32> = BoxBiPredicate::always_true();
22 println!("BoxBiPredicate::always_true():");
23 println!(" test(&42, &10): {}", always_true.test(&42, &10));
24 println!(" test(&-1, &5): {}", always_true.test(&-1, &5));
25 println!(" test(&0, &0): {}", always_true.test(&0, &0));
26 println!(" name: {:?}", always_true.name());
27
28 // BoxBiPredicate::always_false
29 let always_false: BoxBiPredicate<i32, i32> = BoxBiPredicate::always_false();
30 println!("\nBoxBiPredicate::always_false():");
31 println!(" test(&42, &10): {}", always_false.test(&42, &10));
32 println!(" test(&-1, &5): {}", always_false.test(&-1, &5));
33 println!(" test(&0, &0): {}", always_false.test(&0, &0));
34 println!(" name: {:?}", always_false.name());
35
36 println!("\n=== RcBiPredicate always_true/always_false Demo ===\n");
37
38 // RcBiPredicate::always_true
39 let rc_always_true: RcBiPredicate<String, i32> = RcBiPredicate::always_true();
40 println!("RcBiPredicate::always_true():");
41 println!(
42 " test(&\"hello\", &5): {}",
43 rc_always_true.test(&"hello".to_string(), &5)
44 );
45 println!(
46 " test(&\"world\", &-3): {}",
47 rc_always_true.test(&"world".to_string(), &-3)
48 );
49 println!(" name: {:?}", rc_always_true.name());
50
51 // RcBiPredicate::always_false
52 let rc_always_false: RcBiPredicate<String, i32> = RcBiPredicate::always_false();
53 println!("\nRcBiPredicate::always_false():");
54 println!(
55 " test(&\"hello\", &5): {}",
56 rc_always_false.test(&"hello".to_string(), &5)
57 );
58 println!(
59 " test(&\"world\", &-3): {}",
60 rc_always_false.test(&"world".to_string(), &-3)
61 );
62 println!(" name: {:?}", rc_always_false.name());
63
64 // Can be cloned and reused
65 let rc_clone = rc_always_true.clone();
66 println!("\nAfter cloning, still usable:");
67 println!(
68 " Original: test(&\"test\", &1): {}",
69 rc_always_true.test(&"test".to_string(), &1)
70 );
71 println!(
72 " Clone: test(&\"test\", &2): {}",
73 rc_clone.test(&"test".to_string(), &2)
74 );
75
76 println!("\n=== ArcBiPredicate always_true/always_false Demo ===\n");
77
78 // ArcBiPredicate::always_true
79 let arc_always_true: ArcBiPredicate<i32, i32> = ArcBiPredicate::always_true();
80 println!("ArcBiPredicate::always_true():");
81 println!(" test(&100, &50): {}", arc_always_true.test(&100, &50));
82 println!(" test(&-100, &25): {}", arc_always_true.test(&-100, &25));
83 println!(" name: {:?}", arc_always_true.name());
84
85 // ArcBiPredicate::always_false
86 let arc_always_false: ArcBiPredicate<i32, i32> = ArcBiPredicate::always_false();
87 println!("\nArcBiPredicate::always_false():");
88 println!(" test(&100, &50): {}", arc_always_false.test(&100, &50));
89 println!(" test(&-100, &25): {}", arc_always_false.test(&-100, &25));
90 println!(" name: {:?}", arc_always_false.name());
91
92 println!("\n=== Combining with other bi-predicates ===\n");
93
94 // Combining with always_true (AND)
95 let sum_positive = BoxBiPredicate::new(|x: &i32, y: &i32| x + y > 0);
96 let combined_and_true = sum_positive.and(BoxBiPredicate::always_true());
97 println!("sum_positive AND always_true:");
98 println!(
99 " test(&5, &3): {} (equivalent to sum_positive)",
100 combined_and_true.test(&5, &3)
101 );
102 println!(
103 " test(&-3, &-5): {} (equivalent to sum_positive)",
104 combined_and_true.test(&-3, &-5)
105 );
106
107 // Combining with always_false (AND)
108 let sum_positive = BoxBiPredicate::new(|x: &i32, y: &i32| x + y > 0);
109 let combined_and_false = sum_positive.and(BoxBiPredicate::always_false());
110 println!("\nsum_positive AND always_false:");
111 println!(
112 " test(&5, &3): {} (always false)",
113 combined_and_false.test(&5, &3)
114 );
115 println!(
116 " test(&-3, &-5): {} (always false)",
117 combined_and_false.test(&-3, &-5)
118 );
119
120 // Combining with always_true (OR)
121 let sum_positive = BoxBiPredicate::new(|x: &i32, y: &i32| x + y > 0);
122 let combined_or_true = sum_positive.or(BoxBiPredicate::always_true());
123 println!("\nsum_positive OR always_true:");
124 println!(
125 " test(&5, &3): {} (always true)",
126 combined_or_true.test(&5, &3)
127 );
128 println!(
129 " test(&-3, &-5): {} (always true)",
130 combined_or_true.test(&-3, &-5)
131 );
132
133 // Combining with always_false (OR)
134 let sum_positive = BoxBiPredicate::new(|x: &i32, y: &i32| x + y > 0);
135 let combined_or_false = sum_positive.or(BoxBiPredicate::always_false());
136 println!("\nsum_positive OR always_false:");
137 println!(
138 " test(&5, &3): {} (equivalent to sum_positive)",
139 combined_or_false.test(&5, &3)
140 );
141 println!(
142 " test(&-3, &-5): {} (equivalent to sum_positive)",
143 combined_or_false.test(&-3, &-5)
144 );
145
146 println!("\n=== Practical scenarios: Default pass/reject filters ===\n");
147
148 // Scenario 1: Default pass-all filter
149 let pairs = vec![(1, 2), (3, 4), (5, 6)];
150 let pass_all = BoxBiPredicate::<i32, i32>::always_true();
151 let closure = pass_all.into_fn();
152 let filtered: Vec<_> = pairs.iter().filter(|(x, y)| closure(x, y)).collect();
153 println!("Default pass all elements: {:?} -> {:?}", pairs, filtered);
154
155 // Scenario 2: Default reject-all filter
156 let pairs = vec![(1, 2), (3, 4), (5, 6)];
157 let reject_all = BoxBiPredicate::<i32, i32>::always_false();
158 let closure = reject_all.into_fn();
159 let filtered: Vec<_> = pairs.iter().filter(|(x, y)| closure(x, y)).collect();
160 println!("Default reject all elements: {:?} -> {:?}", pairs, filtered);
161
162 // Scenario 3: Configurable filter
163 fn configurable_filter(enable_filter: bool) -> BoxBiPredicate<i32, i32> {
164 if enable_filter {
165 BoxBiPredicate::new(|x: &i32, y: &i32| x + y > 5)
166 } else {
167 BoxBiPredicate::always_true()
168 }
169 }
170
171 let pairs = vec![(1, 2), (3, 4), (5, 6)];
172
173 let filter_enabled = configurable_filter(true);
174 let closure = filter_enabled.into_fn();
175 let filtered: Vec<_> = pairs.iter().filter(|(x, y)| closure(x, y)).collect();
176 println!("\nFilter enabled: {:?} -> {:?}", pairs, filtered);
177
178 let filter_disabled = configurable_filter(false);
179 let closure = filter_disabled.into_fn();
180 let filtered: Vec<_> = pairs.iter().filter(|(x, y)| closure(x, y)).collect();
181 println!("Filter disabled: {:?} -> {:?}", pairs, filtered);
182}Sourcepub fn clear_name(&mut self)
pub fn clear_name(&mut self)
Clears the name of this bi-predicate.
Sourcepub fn always_true() -> Self
pub fn always_true() -> Self
Creates a bi-predicate that always returns true.
§Returns
A new RcBiPredicate that always returns true.
Examples found in repository?
17fn main() {
18 println!("=== BoxBiPredicate always_true/always_false Demo ===\n");
19
20 // BoxBiPredicate::always_true
21 let always_true: BoxBiPredicate<i32, i32> = BoxBiPredicate::always_true();
22 println!("BoxBiPredicate::always_true():");
23 println!(" test(&42, &10): {}", always_true.test(&42, &10));
24 println!(" test(&-1, &5): {}", always_true.test(&-1, &5));
25 println!(" test(&0, &0): {}", always_true.test(&0, &0));
26 println!(" name: {:?}", always_true.name());
27
28 // BoxBiPredicate::always_false
29 let always_false: BoxBiPredicate<i32, i32> = BoxBiPredicate::always_false();
30 println!("\nBoxBiPredicate::always_false():");
31 println!(" test(&42, &10): {}", always_false.test(&42, &10));
32 println!(" test(&-1, &5): {}", always_false.test(&-1, &5));
33 println!(" test(&0, &0): {}", always_false.test(&0, &0));
34 println!(" name: {:?}", always_false.name());
35
36 println!("\n=== RcBiPredicate always_true/always_false Demo ===\n");
37
38 // RcBiPredicate::always_true
39 let rc_always_true: RcBiPredicate<String, i32> = RcBiPredicate::always_true();
40 println!("RcBiPredicate::always_true():");
41 println!(
42 " test(&\"hello\", &5): {}",
43 rc_always_true.test(&"hello".to_string(), &5)
44 );
45 println!(
46 " test(&\"world\", &-3): {}",
47 rc_always_true.test(&"world".to_string(), &-3)
48 );
49 println!(" name: {:?}", rc_always_true.name());
50
51 // RcBiPredicate::always_false
52 let rc_always_false: RcBiPredicate<String, i32> = RcBiPredicate::always_false();
53 println!("\nRcBiPredicate::always_false():");
54 println!(
55 " test(&\"hello\", &5): {}",
56 rc_always_false.test(&"hello".to_string(), &5)
57 );
58 println!(
59 " test(&\"world\", &-3): {}",
60 rc_always_false.test(&"world".to_string(), &-3)
61 );
62 println!(" name: {:?}", rc_always_false.name());
63
64 // Can be cloned and reused
65 let rc_clone = rc_always_true.clone();
66 println!("\nAfter cloning, still usable:");
67 println!(
68 " Original: test(&\"test\", &1): {}",
69 rc_always_true.test(&"test".to_string(), &1)
70 );
71 println!(
72 " Clone: test(&\"test\", &2): {}",
73 rc_clone.test(&"test".to_string(), &2)
74 );
75
76 println!("\n=== ArcBiPredicate always_true/always_false Demo ===\n");
77
78 // ArcBiPredicate::always_true
79 let arc_always_true: ArcBiPredicate<i32, i32> = ArcBiPredicate::always_true();
80 println!("ArcBiPredicate::always_true():");
81 println!(" test(&100, &50): {}", arc_always_true.test(&100, &50));
82 println!(" test(&-100, &25): {}", arc_always_true.test(&-100, &25));
83 println!(" name: {:?}", arc_always_true.name());
84
85 // ArcBiPredicate::always_false
86 let arc_always_false: ArcBiPredicate<i32, i32> = ArcBiPredicate::always_false();
87 println!("\nArcBiPredicate::always_false():");
88 println!(" test(&100, &50): {}", arc_always_false.test(&100, &50));
89 println!(" test(&-100, &25): {}", arc_always_false.test(&-100, &25));
90 println!(" name: {:?}", arc_always_false.name());
91
92 println!("\n=== Combining with other bi-predicates ===\n");
93
94 // Combining with always_true (AND)
95 let sum_positive = BoxBiPredicate::new(|x: &i32, y: &i32| x + y > 0);
96 let combined_and_true = sum_positive.and(BoxBiPredicate::always_true());
97 println!("sum_positive AND always_true:");
98 println!(
99 " test(&5, &3): {} (equivalent to sum_positive)",
100 combined_and_true.test(&5, &3)
101 );
102 println!(
103 " test(&-3, &-5): {} (equivalent to sum_positive)",
104 combined_and_true.test(&-3, &-5)
105 );
106
107 // Combining with always_false (AND)
108 let sum_positive = BoxBiPredicate::new(|x: &i32, y: &i32| x + y > 0);
109 let combined_and_false = sum_positive.and(BoxBiPredicate::always_false());
110 println!("\nsum_positive AND always_false:");
111 println!(
112 " test(&5, &3): {} (always false)",
113 combined_and_false.test(&5, &3)
114 );
115 println!(
116 " test(&-3, &-5): {} (always false)",
117 combined_and_false.test(&-3, &-5)
118 );
119
120 // Combining with always_true (OR)
121 let sum_positive = BoxBiPredicate::new(|x: &i32, y: &i32| x + y > 0);
122 let combined_or_true = sum_positive.or(BoxBiPredicate::always_true());
123 println!("\nsum_positive OR always_true:");
124 println!(
125 " test(&5, &3): {} (always true)",
126 combined_or_true.test(&5, &3)
127 );
128 println!(
129 " test(&-3, &-5): {} (always true)",
130 combined_or_true.test(&-3, &-5)
131 );
132
133 // Combining with always_false (OR)
134 let sum_positive = BoxBiPredicate::new(|x: &i32, y: &i32| x + y > 0);
135 let combined_or_false = sum_positive.or(BoxBiPredicate::always_false());
136 println!("\nsum_positive OR always_false:");
137 println!(
138 " test(&5, &3): {} (equivalent to sum_positive)",
139 combined_or_false.test(&5, &3)
140 );
141 println!(
142 " test(&-3, &-5): {} (equivalent to sum_positive)",
143 combined_or_false.test(&-3, &-5)
144 );
145
146 println!("\n=== Practical scenarios: Default pass/reject filters ===\n");
147
148 // Scenario 1: Default pass-all filter
149 let pairs = vec![(1, 2), (3, 4), (5, 6)];
150 let pass_all = BoxBiPredicate::<i32, i32>::always_true();
151 let closure = pass_all.into_fn();
152 let filtered: Vec<_> = pairs.iter().filter(|(x, y)| closure(x, y)).collect();
153 println!("Default pass all elements: {:?} -> {:?}", pairs, filtered);
154
155 // Scenario 2: Default reject-all filter
156 let pairs = vec![(1, 2), (3, 4), (5, 6)];
157 let reject_all = BoxBiPredicate::<i32, i32>::always_false();
158 let closure = reject_all.into_fn();
159 let filtered: Vec<_> = pairs.iter().filter(|(x, y)| closure(x, y)).collect();
160 println!("Default reject all elements: {:?} -> {:?}", pairs, filtered);
161
162 // Scenario 3: Configurable filter
163 fn configurable_filter(enable_filter: bool) -> BoxBiPredicate<i32, i32> {
164 if enable_filter {
165 BoxBiPredicate::new(|x: &i32, y: &i32| x + y > 5)
166 } else {
167 BoxBiPredicate::always_true()
168 }
169 }
170
171 let pairs = vec![(1, 2), (3, 4), (5, 6)];
172
173 let filter_enabled = configurable_filter(true);
174 let closure = filter_enabled.into_fn();
175 let filtered: Vec<_> = pairs.iter().filter(|(x, y)| closure(x, y)).collect();
176 println!("\nFilter enabled: {:?} -> {:?}", pairs, filtered);
177
178 let filter_disabled = configurable_filter(false);
179 let closure = filter_disabled.into_fn();
180 let filtered: Vec<_> = pairs.iter().filter(|(x, y)| closure(x, y)).collect();
181 println!("Filter disabled: {:?} -> {:?}", pairs, filtered);
182}Sourcepub fn always_false() -> Self
pub fn always_false() -> Self
Creates a bi-predicate that always returns false.
§Returns
A new RcBiPredicate that always returns false.
Examples found in repository?
17fn main() {
18 println!("=== BoxBiPredicate always_true/always_false Demo ===\n");
19
20 // BoxBiPredicate::always_true
21 let always_true: BoxBiPredicate<i32, i32> = BoxBiPredicate::always_true();
22 println!("BoxBiPredicate::always_true():");
23 println!(" test(&42, &10): {}", always_true.test(&42, &10));
24 println!(" test(&-1, &5): {}", always_true.test(&-1, &5));
25 println!(" test(&0, &0): {}", always_true.test(&0, &0));
26 println!(" name: {:?}", always_true.name());
27
28 // BoxBiPredicate::always_false
29 let always_false: BoxBiPredicate<i32, i32> = BoxBiPredicate::always_false();
30 println!("\nBoxBiPredicate::always_false():");
31 println!(" test(&42, &10): {}", always_false.test(&42, &10));
32 println!(" test(&-1, &5): {}", always_false.test(&-1, &5));
33 println!(" test(&0, &0): {}", always_false.test(&0, &0));
34 println!(" name: {:?}", always_false.name());
35
36 println!("\n=== RcBiPredicate always_true/always_false Demo ===\n");
37
38 // RcBiPredicate::always_true
39 let rc_always_true: RcBiPredicate<String, i32> = RcBiPredicate::always_true();
40 println!("RcBiPredicate::always_true():");
41 println!(
42 " test(&\"hello\", &5): {}",
43 rc_always_true.test(&"hello".to_string(), &5)
44 );
45 println!(
46 " test(&\"world\", &-3): {}",
47 rc_always_true.test(&"world".to_string(), &-3)
48 );
49 println!(" name: {:?}", rc_always_true.name());
50
51 // RcBiPredicate::always_false
52 let rc_always_false: RcBiPredicate<String, i32> = RcBiPredicate::always_false();
53 println!("\nRcBiPredicate::always_false():");
54 println!(
55 " test(&\"hello\", &5): {}",
56 rc_always_false.test(&"hello".to_string(), &5)
57 );
58 println!(
59 " test(&\"world\", &-3): {}",
60 rc_always_false.test(&"world".to_string(), &-3)
61 );
62 println!(" name: {:?}", rc_always_false.name());
63
64 // Can be cloned and reused
65 let rc_clone = rc_always_true.clone();
66 println!("\nAfter cloning, still usable:");
67 println!(
68 " Original: test(&\"test\", &1): {}",
69 rc_always_true.test(&"test".to_string(), &1)
70 );
71 println!(
72 " Clone: test(&\"test\", &2): {}",
73 rc_clone.test(&"test".to_string(), &2)
74 );
75
76 println!("\n=== ArcBiPredicate always_true/always_false Demo ===\n");
77
78 // ArcBiPredicate::always_true
79 let arc_always_true: ArcBiPredicate<i32, i32> = ArcBiPredicate::always_true();
80 println!("ArcBiPredicate::always_true():");
81 println!(" test(&100, &50): {}", arc_always_true.test(&100, &50));
82 println!(" test(&-100, &25): {}", arc_always_true.test(&-100, &25));
83 println!(" name: {:?}", arc_always_true.name());
84
85 // ArcBiPredicate::always_false
86 let arc_always_false: ArcBiPredicate<i32, i32> = ArcBiPredicate::always_false();
87 println!("\nArcBiPredicate::always_false():");
88 println!(" test(&100, &50): {}", arc_always_false.test(&100, &50));
89 println!(" test(&-100, &25): {}", arc_always_false.test(&-100, &25));
90 println!(" name: {:?}", arc_always_false.name());
91
92 println!("\n=== Combining with other bi-predicates ===\n");
93
94 // Combining with always_true (AND)
95 let sum_positive = BoxBiPredicate::new(|x: &i32, y: &i32| x + y > 0);
96 let combined_and_true = sum_positive.and(BoxBiPredicate::always_true());
97 println!("sum_positive AND always_true:");
98 println!(
99 " test(&5, &3): {} (equivalent to sum_positive)",
100 combined_and_true.test(&5, &3)
101 );
102 println!(
103 " test(&-3, &-5): {} (equivalent to sum_positive)",
104 combined_and_true.test(&-3, &-5)
105 );
106
107 // Combining with always_false (AND)
108 let sum_positive = BoxBiPredicate::new(|x: &i32, y: &i32| x + y > 0);
109 let combined_and_false = sum_positive.and(BoxBiPredicate::always_false());
110 println!("\nsum_positive AND always_false:");
111 println!(
112 " test(&5, &3): {} (always false)",
113 combined_and_false.test(&5, &3)
114 );
115 println!(
116 " test(&-3, &-5): {} (always false)",
117 combined_and_false.test(&-3, &-5)
118 );
119
120 // Combining with always_true (OR)
121 let sum_positive = BoxBiPredicate::new(|x: &i32, y: &i32| x + y > 0);
122 let combined_or_true = sum_positive.or(BoxBiPredicate::always_true());
123 println!("\nsum_positive OR always_true:");
124 println!(
125 " test(&5, &3): {} (always true)",
126 combined_or_true.test(&5, &3)
127 );
128 println!(
129 " test(&-3, &-5): {} (always true)",
130 combined_or_true.test(&-3, &-5)
131 );
132
133 // Combining with always_false (OR)
134 let sum_positive = BoxBiPredicate::new(|x: &i32, y: &i32| x + y > 0);
135 let combined_or_false = sum_positive.or(BoxBiPredicate::always_false());
136 println!("\nsum_positive OR always_false:");
137 println!(
138 " test(&5, &3): {} (equivalent to sum_positive)",
139 combined_or_false.test(&5, &3)
140 );
141 println!(
142 " test(&-3, &-5): {} (equivalent to sum_positive)",
143 combined_or_false.test(&-3, &-5)
144 );
145
146 println!("\n=== Practical scenarios: Default pass/reject filters ===\n");
147
148 // Scenario 1: Default pass-all filter
149 let pairs = vec![(1, 2), (3, 4), (5, 6)];
150 let pass_all = BoxBiPredicate::<i32, i32>::always_true();
151 let closure = pass_all.into_fn();
152 let filtered: Vec<_> = pairs.iter().filter(|(x, y)| closure(x, y)).collect();
153 println!("Default pass all elements: {:?} -> {:?}", pairs, filtered);
154
155 // Scenario 2: Default reject-all filter
156 let pairs = vec![(1, 2), (3, 4), (5, 6)];
157 let reject_all = BoxBiPredicate::<i32, i32>::always_false();
158 let closure = reject_all.into_fn();
159 let filtered: Vec<_> = pairs.iter().filter(|(x, y)| closure(x, y)).collect();
160 println!("Default reject all elements: {:?} -> {:?}", pairs, filtered);
161
162 // Scenario 3: Configurable filter
163 fn configurable_filter(enable_filter: bool) -> BoxBiPredicate<i32, i32> {
164 if enable_filter {
165 BoxBiPredicate::new(|x: &i32, y: &i32| x + y > 5)
166 } else {
167 BoxBiPredicate::always_true()
168 }
169 }
170
171 let pairs = vec![(1, 2), (3, 4), (5, 6)];
172
173 let filter_enabled = configurable_filter(true);
174 let closure = filter_enabled.into_fn();
175 let filtered: Vec<_> = pairs.iter().filter(|(x, y)| closure(x, y)).collect();
176 println!("\nFilter enabled: {:?} -> {:?}", pairs, filtered);
177
178 let filter_disabled = configurable_filter(false);
179 let closure = filter_disabled.into_fn();
180 let filtered: Vec<_> = pairs.iter().filter(|(x, y)| closure(x, y)).collect();
181 println!("Filter disabled: {:?} -> {:?}", pairs, filtered);
182}Sourcepub fn and<P>(&self, other: P) -> RcBiPredicate<T, U>where
T: 'static,
U: 'static,
P: BiPredicate<T, U> + 'static,
pub fn and<P>(&self, other: P) -> RcBiPredicate<T, U>where
T: 'static,
U: 'static,
P: BiPredicate<T, U> + 'static,
Sourcepub fn or<P>(&self, other: P) -> RcBiPredicate<T, U>where
T: 'static,
U: 'static,
P: BiPredicate<T, U> + 'static,
pub fn or<P>(&self, other: P) -> RcBiPredicate<T, U>where
T: 'static,
U: 'static,
P: BiPredicate<T, U> + 'static,
Sourcepub fn not(&self) -> RcBiPredicate<T, U>where
T: 'static,
U: 'static,
pub fn not(&self) -> RcBiPredicate<T, U>where
T: 'static,
U: 'static,
Returns a bi-predicate that represents the logical negation of this bi-predicate.
This method consumes self due to single-ownership semantics.
§Returns
A new bi-predicate representing the logical negation.
Sourcepub fn nand<P>(&self, other: P) -> RcBiPredicate<T, U>where
T: 'static,
U: 'static,
P: BiPredicate<T, U> + 'static,
pub fn nand<P>(&self, other: P) -> RcBiPredicate<T, U>where
T: 'static,
U: 'static,
P: BiPredicate<T, U> + 'static,
Returns a bi-predicate that represents the logical NAND (NOT AND) of this bi-predicate and another.
NAND returns true unless both bi-predicates are true.
Equivalent to !(self AND other).
This method consumes self due to single-ownership semantics.
§Parameters
other- The other bi-predicate to combine with.
§Returns
A new bi-predicate representing the logical NAND.
Sourcepub fn xor<P>(&self, other: P) -> RcBiPredicate<T, U>where
T: 'static,
U: 'static,
P: BiPredicate<T, U> + 'static,
pub fn xor<P>(&self, other: P) -> RcBiPredicate<T, U>where
T: 'static,
U: 'static,
P: BiPredicate<T, U> + 'static,
Returns a bi-predicate that represents the logical XOR (exclusive OR) of this bi-predicate and another.
XOR returns true if exactly one of the bi-predicates is
true.
This method consumes self due to single-ownership semantics.
§Parameters
other- The other bi-predicate to combine with.
§Returns
A new bi-predicate representing the logical XOR.
Sourcepub fn nor<P>(&self, other: P) -> RcBiPredicate<T, U>where
T: 'static,
U: 'static,
P: BiPredicate<T, U> + 'static,
pub fn nor<P>(&self, other: P) -> RcBiPredicate<T, U>where
T: 'static,
U: 'static,
P: BiPredicate<T, U> + 'static,
Returns a bi-predicate that represents the logical NOR (NOT OR) of this bi-predicate and another.
NOR returns true only when both bi-predicates are false.
Equivalent to !(self OR other).
This method consumes self due to single-ownership semantics.
§Parameters
other- The other bi-predicate to combine with.
§Returns
A new bi-predicate representing the logical NOR.
Trait Implementations§
Source§impl<T, U> BiPredicate<T, U> for RcBiPredicate<T, U>
impl<T, U> BiPredicate<T, U> for RcBiPredicate<T, U>
Source§fn test(&self, first: &T, second: &U) -> bool
fn test(&self, first: &T, second: &U) -> bool
Source§fn into_box(self) -> BoxBiPredicate<T, U>where
Self: 'static,
fn into_box(self) -> BoxBiPredicate<T, U>where
Self: 'static,
BoxBiPredicate. Read moreSource§fn into_rc(self) -> RcBiPredicate<T, U>
fn into_rc(self) -> RcBiPredicate<T, U>
RcBiPredicate. Read moreSource§fn into_fn(self) -> impl Fn(&T, &U) -> bool
fn into_fn(self) -> impl Fn(&T, &U) -> bool
fn to_box(&self) -> BoxBiPredicate<T, U>where
Self: 'static,
fn to_rc(&self) -> RcBiPredicate<T, U>
fn to_fn(&self) -> impl Fn(&T, &U) -> bool
Source§fn into_arc(self) -> ArcBiPredicate<T, U>
fn into_arc(self) -> ArcBiPredicate<T, U>
ArcBiPredicate. Read more