Implement some traits for rayon support.
This commit is contained in:
39
src/lib.rs
39
src/lib.rs
@@ -1,3 +1,4 @@
|
||||
extern crate rayon;
|
||||
extern crate serde;
|
||||
extern crate unreachable;
|
||||
|
||||
@@ -5,7 +6,9 @@ use std::fmt;
|
||||
use std::ops;
|
||||
use std::iter::{FromIterator, IntoIterator, Iterator};
|
||||
use std::default::Default;
|
||||
use std::collections::HashMap;
|
||||
use std::collections::{HashMap, LinkedList};
|
||||
|
||||
use rayon::iter::{FromParallelIterator, IntoParallelIterator, ParallelExtend, ParallelIterator};
|
||||
|
||||
use serde::{Deserialize, Deserializer, Serialize, Serializer};
|
||||
use serde::ser::SerializeSeq;
|
||||
@@ -330,6 +333,40 @@ impl Iterator for IntoIter {
|
||||
}
|
||||
}
|
||||
|
||||
impl ParallelExtend<u64> for BitSet {
|
||||
fn par_extend<I>(&mut self, par_iter: I)
|
||||
where I:
|
||||
IntoParallelIterator<Item = u64>
|
||||
{
|
||||
let list = par_iter
|
||||
.into_par_iter()
|
||||
.fold(Vec::new, |mut vec, elem| {
|
||||
vec.push(elem);
|
||||
vec
|
||||
})
|
||||
.collect::<LinkedList<Vec<u64>>>();
|
||||
|
||||
let len = list.iter().map(Vec::len).sum();
|
||||
|
||||
let mut set = BitSet::with_capacity(len);
|
||||
|
||||
for vec in list {
|
||||
set.extend(vec);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl FromParallelIterator<u64> for BitSet {
|
||||
fn from_par_iter<I>(par_iter: I) -> Self
|
||||
where
|
||||
I: IntoParallelIterator<Item = u64>
|
||||
{
|
||||
let mut set = BitSet::new();
|
||||
set.par_extend(par_iter);
|
||||
set
|
||||
}
|
||||
}
|
||||
|
||||
impl Serialize for BitSet {
|
||||
#[inline]
|
||||
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
|
||||
|
||||
Reference in New Issue
Block a user