pub struct RcConditionalBiConsumer<T, U> { /* private fields */ }Expand description
RcConditionalBiConsumer struct
A single-threaded conditional bi-consumer that only executes when a predicate is
satisfied. Uses RcBiConsumer and RcBiPredicate for shared ownership within a
single thread.
This type is typically created by calling RcBiConsumer::when() and is
designed to work with the or_else() method to create if-then-else logic.
§Features
- Shared Ownership: Cloneable via
Rc, multiple owners allowed - Single-Threaded: Not thread-safe, cannot be sent across threads
- Conditional Execution: Only consumes when predicate returns
true - No Lock Overhead: More efficient than
ArcConditionalBiConsumer
§Examples
use prism3_function::{BiConsumer, RcBiConsumer};
use std::rc::Rc;
use std::cell::RefCell;
let log = Rc::new(RefCell::new(Vec::new()));
let l = log.clone();
let conditional = RcBiConsumer::new(move |x: &i32, y: &i32| {
l.borrow_mut().push(*x + *y);
}).when(|x: &i32, y: &i32| *x > 0 && *y > 0);
let conditional_clone = conditional.clone();
let mut value = 5;
let mut m = conditional;
m.accept(&value, &3);
assert_eq!(*log.borrow(), vec![8]);§Author
Haixing Hu
Implementations§
Source§impl<T, U> RcConditionalBiConsumer<T, U>where
T: 'static,
U: 'static,
impl<T, U> RcConditionalBiConsumer<T, U>where
T: 'static,
U: 'static,
Sourcepub fn or_else<C>(&self, else_consumer: C) -> RcBiConsumer<T, U>where
C: BiConsumer<T, U> + 'static,
pub fn or_else<C>(&self, else_consumer: C) -> RcBiConsumer<T, U>where
C: BiConsumer<T, U> + 'static,
Adds an else branch (single-threaded shared version)
Executes the original consumer when the condition is satisfied, otherwise executes else_consumer.
§Parameters
else_consumer- The consumer for the else branch. Note: This parameter is passed by value and will transfer ownership. If you need to preserve the original consumer, clone it first (if it implementsClone). Can be:- A closure:
|x: &T, y: &U| - An
RcBiConsumer<T, U> - A
BoxBiConsumer<T, U> - Any type implementing
BiConsumer<T, U>
- A closure:
§Returns
Returns the composed RcBiConsumer<T, U>
§Examples
§Using a closure (recommended)
use prism3_function::{BiConsumer, RcBiConsumer};
use std::rc::Rc;
use std::cell::RefCell;
let log = Rc::new(RefCell::new(Vec::new()));
let l1 = log.clone();
let l2 = log.clone();
let mut consumer = RcBiConsumer::new(move |x: &i32, y: &i32| {
l1.borrow_mut().push(*x + *y);
}).when(|x: &i32, y: &i32| *x > 0 && *y > 0)
.or_else(move |x: &i32, y: &i32| {
l2.borrow_mut().push(*x * *y);
});
consumer.accept(&5, &3);
assert_eq!(*log.borrow(), vec![8]);
consumer.accept(&-5, &3);
assert_eq!(*log.borrow(), vec![8, -15]);Trait Implementations§
Source§impl<T, U> BiConsumer<T, U> for RcConditionalBiConsumer<T, U>where
T: 'static,
U: 'static,
impl<T, U> BiConsumer<T, U> for RcConditionalBiConsumer<T, U>where
T: 'static,
U: 'static,
Source§fn into_box(self) -> BoxBiConsumer<T, U>
fn into_box(self) -> BoxBiConsumer<T, U>
Converts to BoxBiConsumer Read more
Source§fn into_rc(self) -> RcBiConsumer<T, U>
fn into_rc(self) -> RcBiConsumer<T, U>
Converts to RcBiConsumer Read more
Source§fn into_arc(self) -> ArcBiConsumer<T, U>
fn into_arc(self) -> ArcBiConsumer<T, U>
Converts to ArcBiConsumer Read more
Source§fn to_box(&self) -> BoxBiConsumer<T, U>
fn to_box(&self) -> BoxBiConsumer<T, U>
Converts to BoxBiConsumer (non-consuming) Read more
Source§fn to_rc(&self) -> RcBiConsumer<T, U>
fn to_rc(&self) -> RcBiConsumer<T, U>
Converts to RcBiConsumer (non-consuming) Read more
Source§fn to_arc(&self) -> ArcBiConsumer<T, U>
fn to_arc(&self) -> ArcBiConsumer<T, U>
Converts to ArcBiConsumer (non-consuming) Read more
Source§impl<T, U> Clone for RcConditionalBiConsumer<T, U>
impl<T, U> Clone for RcConditionalBiConsumer<T, U>
Auto Trait Implementations§
impl<T, U> Freeze for RcConditionalBiConsumer<T, U>
impl<T, U> !RefUnwindSafe for RcConditionalBiConsumer<T, U>
impl<T, U> !Send for RcConditionalBiConsumer<T, U>
impl<T, U> !Sync for RcConditionalBiConsumer<T, U>
impl<T, U> Unpin for RcConditionalBiConsumer<T, U>
impl<T, U> !UnwindSafe for RcConditionalBiConsumer<T, U>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more