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