use super::ParallelQueryBuilder;
use crate::core::state::{Filtered, Sorted};
use rayon::prelude::*;
use std::marker::PhantomData;
impl<T: Send + 'static> ParallelQueryBuilder<T, Sorted> {
pub fn par_where<F>(self, predicate: F) -> ParallelQueryBuilder<T, Filtered>
where
F: Fn(&T) -> bool + Sync + Send,
{
let items: Vec<T> = self
.items
.into_par_iter()
.filter(|x| predicate(x))
.collect();
ParallelQueryBuilder {
items,
_state: PhantomData,
}
}
pub fn par_select<U, F>(self, f: F) -> ParallelQueryBuilder<U, Filtered>
where
U: Send + 'static,
F: Fn(T) -> U + Sync + Send,
{
let items: Vec<U> = self.items.into_par_iter().map(f).collect();
ParallelQueryBuilder {
items,
_state: PhantomData,
}
}
}