Skip to content

Commit f1d03ec

Browse files
committed
remove closure
1 parent 902c584 commit f1d03ec

File tree

1 file changed

+34
-28
lines changed

1 file changed

+34
-28
lines changed

src/xor8/builder.rs

+34-28
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,16 @@
1-
use std::collections::HashSet;
2-
use std::hash::BuildHasher;
3-
use std::hash::Hash;
4-
use std::hash::Hasher;
5-
use std::sync::Arc;
6-
7-
use crate::xor8::filter::fingerprint;
8-
use crate::xor8::filter::splitmix64;
9-
use crate::xor8::filter::XorSet;
10-
use crate::xor8::Xor8;
11-
use crate::BuildHasherDefault;
1+
use std::{
2+
collections::HashSet,
3+
hash::{BuildHasher, Hash, Hasher},
4+
sync::Arc,
5+
};
6+
7+
use crate::{
8+
xor8::{
9+
filter::{fingerprint, splitmix64, XorSet},
10+
Xor8,
11+
},
12+
BuildHasherDefault,
13+
};
1214

1315
#[derive(Clone, Copy, Default)]
1416
struct KeyIndex {
@@ -87,8 +89,8 @@ where
8789

8890
/// Insert 64-bit digest of a single key.
8991
///
90-
/// Digest for the key shall be generated using the default-hasher or via hasher
91-
/// supplied via [Xor8Builder::with_hasher] method.
92+
/// Digest for the key shall be generated using the default-hasher or via
93+
/// hasher supplied via [Xor8Builder::with_hasher] method.
9294
pub fn insert<K: ?Sized + Hash>(&mut self, key: &K) {
9395
let digest = self.hash(key);
9496

@@ -98,8 +100,8 @@ where
98100

99101
/// Populate with 64-bit digests for a collection of keys of type `K`.
100102
///
101-
/// Digest for key shall be generated using the default-hasher or via hasher supplied
102-
/// via [Xor8Builder::with_hasher] method.
103+
/// Digest for key shall be generated using the default-hasher or via hasher
104+
/// supplied via [Xor8Builder::with_hasher] method.
103105
pub fn populate<'i, K: Hash + 'i, I: IntoIterator<Item = &'i K>>(&mut self, keys: I) {
104106
let mut n = 0;
105107

@@ -125,40 +127,44 @@ where
125127
self.num_digests += n;
126128
}
127129

128-
/// Build bitmap for keys that where previously inserted using [Xor8Builder::insert],
129-
/// [Xor8Builder::populate] and [Xor8Builder::populate_digests] method.
130+
/// Build bitmap for keys that where previously inserted using
131+
/// [Xor8Builder::insert], [Xor8Builder::populate] and
132+
/// [Xor8Builder::populate_digests] method.
130133
pub fn build(&mut self) -> Result<Xor8<H>, crate::Error> {
131134
let digest_len = self.digests.len();
132-
let digests = self.digests.iter().copied();
133-
Self::build_inner(self.hash_builder.clone(), || digests.clone(), digest_len)
135+
Self::build_inner(
136+
self.hash_builder.clone(),
137+
self.digests.iter().copied(),
138+
digest_len,
139+
)
134140
}
135141

136142
/// Build a bitmap for pre-computed 64-bit digests for keys.
137143
///
138144
/// If keys where previously inserted using [Xor8Builder::insert] or
139-
/// [Xor8Builder::populate] or [Xor8Builder::populate_digests] methods, they shall be
140-
/// ignored.
145+
/// [Xor8Builder::populate] or [Xor8Builder::populate_digests] methods, they
146+
/// shall be ignored.
141147
///
142-
/// It is upto the caller to ensure that digests are unique, that there no duplicates.
148+
/// It is upto the caller to ensure that digests are unique, that there no
149+
/// duplicates.
143150
pub fn build_from_digests(
144151
&mut self,
145152
digests: &[u64],
146153
) -> Result<Xor8<H>, crate::Error> {
147154
Self::build_inner(
148155
self.hash_builder.clone(),
149-
|| digests.iter().copied(),
156+
digests.iter().copied(),
150157
digests.len(),
151158
)
152159
}
153160

154-
fn build_inner<F, It>(
161+
fn build_inner<It>(
155162
hash_builder: H,
156-
digest_generator: F,
163+
digest_iter: It,
157164
digest_len: usize,
158165
) -> Result<Xor8<H>, crate::Error>
159166
where
160-
F: Fn() -> It,
161-
It: IntoIterator<Item = u64> + Clone,
167+
It: Iterator<Item = u64> + Clone,
162168
{
163169
let mut ff = Xor8::<H>::new(hash_builder);
164170

@@ -182,7 +188,7 @@ where
182188
let mut sets2: Vec<XorSet> = vec![XorSet::default(); block_length];
183189

184190
loop {
185-
for key in digest_generator() {
191+
for key in digest_iter.clone() {
186192
let hs = ff.get_h0h1h2(key);
187193
sets0[hs.h0 as usize].xor_mask ^= hs.h;
188194
sets0[hs.h0 as usize].count += 1;

0 commit comments

Comments
 (0)