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));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?
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!(" test(&5, &3): {} (always false)", combined_and_false.test(&5, &3));
112 println!(" test(&-3, &-5): {} (always false)", combined_and_false.test(&-3, &-5));
113
114 // Combining with always_true (OR)
115 let sum_positive = BoxBiPredicate::new(|x: &i32, y: &i32| x + y > 0);
116 let combined_or_true = sum_positive.or(BoxBiPredicate::always_true());
117 println!("\nsum_positive OR always_true:");
118 println!(" test(&5, &3): {} (always true)", combined_or_true.test(&5, &3));
119 println!(" test(&-3, &-5): {} (always true)", combined_or_true.test(&-3, &-5));
120
121 // Combining with always_false (OR)
122 let sum_positive = BoxBiPredicate::new(|x: &i32, y: &i32| x + y > 0);
123 let combined_or_false = sum_positive.or(BoxBiPredicate::always_false());
124 println!("\nsum_positive OR always_false:");
125 println!(
126 " test(&5, &3): {} (equivalent to sum_positive)",
127 combined_or_false.test(&5, &3)
128 );
129 println!(
130 " test(&-3, &-5): {} (equivalent to sum_positive)",
131 combined_or_false.test(&-3, &-5)
132 );
133
134 println!("\n=== Practical scenarios: Default pass/reject filters ===\n");
135
136 // Scenario 1: Default pass-all filter
137 let pairs = vec![(1, 2), (3, 4), (5, 6)];
138 let pass_all = BoxBiPredicate::<i32, i32>::always_true();
139 let closure = pass_all.into_fn();
140 let filtered: Vec<_> = pairs.iter().filter(|(x, y)| closure(x, y)).collect();
141 println!("Default pass all elements: {:?} -> {:?}", pairs, filtered);
142
143 // Scenario 2: Default reject-all filter
144 let pairs = vec![(1, 2), (3, 4), (5, 6)];
145 let reject_all = BoxBiPredicate::<i32, i32>::always_false();
146 let closure = reject_all.into_fn();
147 let filtered: Vec<_> = pairs.iter().filter(|(x, y)| closure(x, y)).collect();
148 println!("Default reject all elements: {:?} -> {:?}", pairs, filtered);
149
150 // Scenario 3: Configurable filter
151 fn configurable_filter(enable_filter: bool) -> BoxBiPredicate<i32, i32> {
152 if enable_filter {
153 BoxBiPredicate::new(|x: &i32, y: &i32| x + y > 5)
154 } else {
155 BoxBiPredicate::always_true()
156 }
157 }
158
159 let pairs = vec![(1, 2), (3, 4), (5, 6)];
160
161 let filter_enabled = configurable_filter(true);
162 let closure = filter_enabled.into_fn();
163 let filtered: Vec<_> = pairs.iter().filter(|(x, y)| closure(x, y)).collect();
164 println!("\nFilter enabled: {:?} -> {:?}", pairs, filtered);
165
166 let filter_disabled = configurable_filter(false);
167 let closure = filter_disabled.into_fn();
168 let filtered: Vec<_> = pairs.iter().filter(|(x, y)| closure(x, y)).collect();
169 println!("Filter disabled: {:?} -> {:?}", pairs, filtered);
170}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!(" test(&5, &3): {} (always false)", combined_and_false.test(&5, &3));
112 println!(" test(&-3, &-5): {} (always false)", combined_and_false.test(&-3, &-5));
113
114 // Combining with always_true (OR)
115 let sum_positive = BoxBiPredicate::new(|x: &i32, y: &i32| x + y > 0);
116 let combined_or_true = sum_positive.or(BoxBiPredicate::always_true());
117 println!("\nsum_positive OR always_true:");
118 println!(" test(&5, &3): {} (always true)", combined_or_true.test(&5, &3));
119 println!(" test(&-3, &-5): {} (always true)", combined_or_true.test(&-3, &-5));
120
121 // Combining with always_false (OR)
122 let sum_positive = BoxBiPredicate::new(|x: &i32, y: &i32| x + y > 0);
123 let combined_or_false = sum_positive.or(BoxBiPredicate::always_false());
124 println!("\nsum_positive OR always_false:");
125 println!(
126 " test(&5, &3): {} (equivalent to sum_positive)",
127 combined_or_false.test(&5, &3)
128 );
129 println!(
130 " test(&-3, &-5): {} (equivalent to sum_positive)",
131 combined_or_false.test(&-3, &-5)
132 );
133
134 println!("\n=== Practical scenarios: Default pass/reject filters ===\n");
135
136 // Scenario 1: Default pass-all filter
137 let pairs = vec![(1, 2), (3, 4), (5, 6)];
138 let pass_all = BoxBiPredicate::<i32, i32>::always_true();
139 let closure = pass_all.into_fn();
140 let filtered: Vec<_> = pairs.iter().filter(|(x, y)| closure(x, y)).collect();
141 println!("Default pass all elements: {:?} -> {:?}", pairs, filtered);
142
143 // Scenario 2: Default reject-all filter
144 let pairs = vec![(1, 2), (3, 4), (5, 6)];
145 let reject_all = BoxBiPredicate::<i32, i32>::always_false();
146 let closure = reject_all.into_fn();
147 let filtered: Vec<_> = pairs.iter().filter(|(x, y)| closure(x, y)).collect();
148 println!("Default reject all elements: {:?} -> {:?}", pairs, filtered);
149
150 // Scenario 3: Configurable filter
151 fn configurable_filter(enable_filter: bool) -> BoxBiPredicate<i32, i32> {
152 if enable_filter {
153 BoxBiPredicate::new(|x: &i32, y: &i32| x + y > 5)
154 } else {
155 BoxBiPredicate::always_true()
156 }
157 }
158
159 let pairs = vec![(1, 2), (3, 4), (5, 6)];
160
161 let filter_enabled = configurable_filter(true);
162 let closure = filter_enabled.into_fn();
163 let filtered: Vec<_> = pairs.iter().filter(|(x, y)| closure(x, y)).collect();
164 println!("\nFilter enabled: {:?} -> {:?}", pairs, filtered);
165
166 let filter_disabled = configurable_filter(false);
167 let closure = filter_disabled.into_fn();
168 let filtered: Vec<_> = pairs.iter().filter(|(x, y)| closure(x, y)).collect();
169 println!("Filter disabled: {:?} -> {:?}", pairs, filtered);
170}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?
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!(" test(&5, &3): {} (always false)", combined_and_false.test(&5, &3));
112 println!(" test(&-3, &-5): {} (always false)", combined_and_false.test(&-3, &-5));
113
114 // Combining with always_true (OR)
115 let sum_positive = BoxBiPredicate::new(|x: &i32, y: &i32| x + y > 0);
116 let combined_or_true = sum_positive.or(BoxBiPredicate::always_true());
117 println!("\nsum_positive OR always_true:");
118 println!(" test(&5, &3): {} (always true)", combined_or_true.test(&5, &3));
119 println!(" test(&-3, &-5): {} (always true)", combined_or_true.test(&-3, &-5));
120
121 // Combining with always_false (OR)
122 let sum_positive = BoxBiPredicate::new(|x: &i32, y: &i32| x + y > 0);
123 let combined_or_false = sum_positive.or(BoxBiPredicate::always_false());
124 println!("\nsum_positive OR always_false:");
125 println!(
126 " test(&5, &3): {} (equivalent to sum_positive)",
127 combined_or_false.test(&5, &3)
128 );
129 println!(
130 " test(&-3, &-5): {} (equivalent to sum_positive)",
131 combined_or_false.test(&-3, &-5)
132 );
133
134 println!("\n=== Practical scenarios: Default pass/reject filters ===\n");
135
136 // Scenario 1: Default pass-all filter
137 let pairs = vec![(1, 2), (3, 4), (5, 6)];
138 let pass_all = BoxBiPredicate::<i32, i32>::always_true();
139 let closure = pass_all.into_fn();
140 let filtered: Vec<_> = pairs.iter().filter(|(x, y)| closure(x, y)).collect();
141 println!("Default pass all elements: {:?} -> {:?}", pairs, filtered);
142
143 // Scenario 2: Default reject-all filter
144 let pairs = vec![(1, 2), (3, 4), (5, 6)];
145 let reject_all = BoxBiPredicate::<i32, i32>::always_false();
146 let closure = reject_all.into_fn();
147 let filtered: Vec<_> = pairs.iter().filter(|(x, y)| closure(x, y)).collect();
148 println!("Default reject all elements: {:?} -> {:?}", pairs, filtered);
149
150 // Scenario 3: Configurable filter
151 fn configurable_filter(enable_filter: bool) -> BoxBiPredicate<i32, i32> {
152 if enable_filter {
153 BoxBiPredicate::new(|x: &i32, y: &i32| x + y > 5)
154 } else {
155 BoxBiPredicate::always_true()
156 }
157 }
158
159 let pairs = vec![(1, 2), (3, 4), (5, 6)];
160
161 let filter_enabled = configurable_filter(true);
162 let closure = filter_enabled.into_fn();
163 let filtered: Vec<_> = pairs.iter().filter(|(x, y)| closure(x, y)).collect();
164 println!("\nFilter enabled: {:?} -> {:?}", pairs, filtered);
165
166 let filter_disabled = configurable_filter(false);
167 let closure = filter_disabled.into_fn();
168 let filtered: Vec<_> = pairs.iter().filter(|(x, y)| closure(x, y)).collect();
169 println!("Filter disabled: {:?} -> {:?}", pairs, filtered);
170}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?
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!(" test(&5, &3): {} (always false)", combined_and_false.test(&5, &3));
112 println!(" test(&-3, &-5): {} (always false)", combined_and_false.test(&-3, &-5));
113
114 // Combining with always_true (OR)
115 let sum_positive = BoxBiPredicate::new(|x: &i32, y: &i32| x + y > 0);
116 let combined_or_true = sum_positive.or(BoxBiPredicate::always_true());
117 println!("\nsum_positive OR always_true:");
118 println!(" test(&5, &3): {} (always true)", combined_or_true.test(&5, &3));
119 println!(" test(&-3, &-5): {} (always true)", combined_or_true.test(&-3, &-5));
120
121 // Combining with always_false (OR)
122 let sum_positive = BoxBiPredicate::new(|x: &i32, y: &i32| x + y > 0);
123 let combined_or_false = sum_positive.or(BoxBiPredicate::always_false());
124 println!("\nsum_positive OR always_false:");
125 println!(
126 " test(&5, &3): {} (equivalent to sum_positive)",
127 combined_or_false.test(&5, &3)
128 );
129 println!(
130 " test(&-3, &-5): {} (equivalent to sum_positive)",
131 combined_or_false.test(&-3, &-5)
132 );
133
134 println!("\n=== Practical scenarios: Default pass/reject filters ===\n");
135
136 // Scenario 1: Default pass-all filter
137 let pairs = vec![(1, 2), (3, 4), (5, 6)];
138 let pass_all = BoxBiPredicate::<i32, i32>::always_true();
139 let closure = pass_all.into_fn();
140 let filtered: Vec<_> = pairs.iter().filter(|(x, y)| closure(x, y)).collect();
141 println!("Default pass all elements: {:?} -> {:?}", pairs, filtered);
142
143 // Scenario 2: Default reject-all filter
144 let pairs = vec![(1, 2), (3, 4), (5, 6)];
145 let reject_all = BoxBiPredicate::<i32, i32>::always_false();
146 let closure = reject_all.into_fn();
147 let filtered: Vec<_> = pairs.iter().filter(|(x, y)| closure(x, y)).collect();
148 println!("Default reject all elements: {:?} -> {:?}", pairs, filtered);
149
150 // Scenario 3: Configurable filter
151 fn configurable_filter(enable_filter: bool) -> BoxBiPredicate<i32, i32> {
152 if enable_filter {
153 BoxBiPredicate::new(|x: &i32, y: &i32| x + y > 5)
154 } else {
155 BoxBiPredicate::always_true()
156 }
157 }
158
159 let pairs = vec![(1, 2), (3, 4), (5, 6)];
160
161 let filter_enabled = configurable_filter(true);
162 let closure = filter_enabled.into_fn();
163 let filtered: Vec<_> = pairs.iter().filter(|(x, y)| closure(x, y)).collect();
164 println!("\nFilter enabled: {:?} -> {:?}", pairs, filtered);
165
166 let filter_disabled = configurable_filter(false);
167 let closure = filter_disabled.into_fn();
168 let filtered: Vec<_> = pairs.iter().filter(|(x, y)| closure(x, y)).collect();
169 println!("Filter disabled: {:?} -> {:?}", pairs, filtered);
170}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?
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!(" test(&5, &3): {} (always false)", combined_and_false.test(&5, &3));
112 println!(" test(&-3, &-5): {} (always false)", combined_and_false.test(&-3, &-5));
113
114 // Combining with always_true (OR)
115 let sum_positive = BoxBiPredicate::new(|x: &i32, y: &i32| x + y > 0);
116 let combined_or_true = sum_positive.or(BoxBiPredicate::always_true());
117 println!("\nsum_positive OR always_true:");
118 println!(" test(&5, &3): {} (always true)", combined_or_true.test(&5, &3));
119 println!(" test(&-3, &-5): {} (always true)", combined_or_true.test(&-3, &-5));
120
121 // Combining with always_false (OR)
122 let sum_positive = BoxBiPredicate::new(|x: &i32, y: &i32| x + y > 0);
123 let combined_or_false = sum_positive.or(BoxBiPredicate::always_false());
124 println!("\nsum_positive OR always_false:");
125 println!(
126 " test(&5, &3): {} (equivalent to sum_positive)",
127 combined_or_false.test(&5, &3)
128 );
129 println!(
130 " test(&-3, &-5): {} (equivalent to sum_positive)",
131 combined_or_false.test(&-3, &-5)
132 );
133
134 println!("\n=== Practical scenarios: Default pass/reject filters ===\n");
135
136 // Scenario 1: Default pass-all filter
137 let pairs = vec![(1, 2), (3, 4), (5, 6)];
138 let pass_all = BoxBiPredicate::<i32, i32>::always_true();
139 let closure = pass_all.into_fn();
140 let filtered: Vec<_> = pairs.iter().filter(|(x, y)| closure(x, y)).collect();
141 println!("Default pass all elements: {:?} -> {:?}", pairs, filtered);
142
143 // Scenario 2: Default reject-all filter
144 let pairs = vec![(1, 2), (3, 4), (5, 6)];
145 let reject_all = BoxBiPredicate::<i32, i32>::always_false();
146 let closure = reject_all.into_fn();
147 let filtered: Vec<_> = pairs.iter().filter(|(x, y)| closure(x, y)).collect();
148 println!("Default reject all elements: {:?} -> {:?}", pairs, filtered);
149
150 // Scenario 3: Configurable filter
151 fn configurable_filter(enable_filter: bool) -> BoxBiPredicate<i32, i32> {
152 if enable_filter {
153 BoxBiPredicate::new(|x: &i32, y: &i32| x + y > 5)
154 } else {
155 BoxBiPredicate::always_true()
156 }
157 }
158
159 let pairs = vec![(1, 2), (3, 4), (5, 6)];
160
161 let filter_enabled = configurable_filter(true);
162 let closure = filter_enabled.into_fn();
163 let filtered: Vec<_> = pairs.iter().filter(|(x, y)| closure(x, y)).collect();
164 println!("\nFilter enabled: {:?} -> {:?}", pairs, filtered);
165
166 let filter_disabled = configurable_filter(false);
167 let closure = filter_disabled.into_fn();
168 let filtered: Vec<_> = pairs.iter().filter(|(x, y)| closure(x, y)).collect();
169 println!("Filter disabled: {:?} -> {:?}", pairs, filtered);
170}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?
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!(" test(&5, &3): {} (always false)", combined_and_false.test(&5, &3));
112 println!(" test(&-3, &-5): {} (always false)", combined_and_false.test(&-3, &-5));
113
114 // Combining with always_true (OR)
115 let sum_positive = BoxBiPredicate::new(|x: &i32, y: &i32| x + y > 0);
116 let combined_or_true = sum_positive.or(BoxBiPredicate::always_true());
117 println!("\nsum_positive OR always_true:");
118 println!(" test(&5, &3): {} (always true)", combined_or_true.test(&5, &3));
119 println!(" test(&-3, &-5): {} (always true)", combined_or_true.test(&-3, &-5));
120
121 // Combining with always_false (OR)
122 let sum_positive = BoxBiPredicate::new(|x: &i32, y: &i32| x + y > 0);
123 let combined_or_false = sum_positive.or(BoxBiPredicate::always_false());
124 println!("\nsum_positive OR always_false:");
125 println!(
126 " test(&5, &3): {} (equivalent to sum_positive)",
127 combined_or_false.test(&5, &3)
128 );
129 println!(
130 " test(&-3, &-5): {} (equivalent to sum_positive)",
131 combined_or_false.test(&-3, &-5)
132 );
133
134 println!("\n=== Practical scenarios: Default pass/reject filters ===\n");
135
136 // Scenario 1: Default pass-all filter
137 let pairs = vec![(1, 2), (3, 4), (5, 6)];
138 let pass_all = BoxBiPredicate::<i32, i32>::always_true();
139 let closure = pass_all.into_fn();
140 let filtered: Vec<_> = pairs.iter().filter(|(x, y)| closure(x, y)).collect();
141 println!("Default pass all elements: {:?} -> {:?}", pairs, filtered);
142
143 // Scenario 2: Default reject-all filter
144 let pairs = vec![(1, 2), (3, 4), (5, 6)];
145 let reject_all = BoxBiPredicate::<i32, i32>::always_false();
146 let closure = reject_all.into_fn();
147 let filtered: Vec<_> = pairs.iter().filter(|(x, y)| closure(x, y)).collect();
148 println!("Default reject all elements: {:?} -> {:?}", pairs, filtered);
149
150 // Scenario 3: Configurable filter
151 fn configurable_filter(enable_filter: bool) -> BoxBiPredicate<i32, i32> {
152 if enable_filter {
153 BoxBiPredicate::new(|x: &i32, y: &i32| x + y > 5)
154 } else {
155 BoxBiPredicate::always_true()
156 }
157 }
158
159 let pairs = vec![(1, 2), (3, 4), (5, 6)];
160
161 let filter_enabled = configurable_filter(true);
162 let closure = filter_enabled.into_fn();
163 let filtered: Vec<_> = pairs.iter().filter(|(x, y)| closure(x, y)).collect();
164 println!("\nFilter enabled: {:?} -> {:?}", pairs, filtered);
165
166 let filter_disabled = configurable_filter(false);
167 let closure = filter_disabled.into_fn();
168 let filtered: Vec<_> = pairs.iter().filter(|(x, y)| closure(x, y)).collect();
169 println!("Filter disabled: {:?} -> {:?}", pairs, filtered);
170}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