pub struct RcConditionalBiTransformer<T, U, R> { /* private fields */ }Expand description
RcConditionalBiTransformer struct
A single-threaded conditional bi-transformer that only executes when a
bi-predicate is satisfied. Uses RcBiTransformer and RcBiPredicate for
shared ownership within a single thread.
This type is typically created by calling RcBiTransformer::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 transforms when bi-predicate returns
true - No Lock Overhead: More efficient than
ArcConditionalBiTransformer
§Examples
use prism3_function::{BiTransformer, RcBiTransformer};
let add = RcBiTransformer::new(|x: i32, y: i32| x + y);
let multiply = RcBiTransformer::new(|x: i32, y: i32| x * y);
let conditional = add.when(|x: &i32, y: &i32| *x > 0).or_else(multiply);
let conditional_clone = conditional.clone();
assert_eq!(conditional.apply(5, 3), 8);
assert_eq!(conditional_clone.apply(-5, 3), -15);§Author
Haixing Hu
Implementations§
Source§impl<T, U, R> RcConditionalBiTransformer<T, U, R>where
T: 'static,
U: 'static,
R: 'static,
impl<T, U, R> RcConditionalBiTransformer<T, U, R>where
T: 'static,
U: 'static,
R: 'static,
Sourcepub fn or_else<F>(&self, else_transformer: F) -> RcBiTransformer<T, U, R>where
F: BiTransformer<T, U, R> + 'static,
pub fn or_else<F>(&self, else_transformer: F) -> RcBiTransformer<T, U, R>where
F: BiTransformer<T, U, R> + 'static,
Adds an else branch (single-threaded shared version)
Executes the original bi-transformer when the condition is satisfied, otherwise executes else_transformer.
§Parameters
else_transformer- The bi-transformer for the else branch, can be:- Closure:
|x: T, y: U| -> R RcBiTransformer<T, U, R>,BoxBiTransformer<T, U, R>- Any type implementing
BiTransformer<T, U, R>
- Closure:
§Returns
Returns the composed RcBiTransformer<T, U, R>
§Examples
§Using a closure (recommended)
use prism3_function::{BiTransformer, RcBiTransformer};
let add = RcBiTransformer::new(|x: i32, y: i32| x + y);
let conditional = add.when(|x: &i32, y: &i32| *x > 0).or_else(|x: i32, y: i32| x * y);
assert_eq!(conditional.apply(5, 3), 8);
assert_eq!(conditional.apply(-5, 3), -15);Trait Implementations§
Source§impl<T, U, R> Clone for RcConditionalBiTransformer<T, U, R>
impl<T, U, R> Clone for RcConditionalBiTransformer<T, U, R>
Auto Trait Implementations§
impl<T, U, R> Freeze for RcConditionalBiTransformer<T, U, R>
impl<T, U, R> !RefUnwindSafe for RcConditionalBiTransformer<T, U, R>
impl<T, U, R> !Send for RcConditionalBiTransformer<T, U, R>
impl<T, U, R> !Sync for RcConditionalBiTransformer<T, U, R>
impl<T, U, R> Unpin for RcConditionalBiTransformer<T, U, R>
impl<T, U, R> !UnwindSafe for RcConditionalBiTransformer<T, U, R>
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