Skip to content

Commit 13798e4

Browse files
author
Roderick Bovee
committed
Bump to Rust 2018 and fix clippy (& other) lints
1 parent edc19cd commit 13798e4

File tree

5 files changed

+36
-34
lines changed

5 files changed

+36
-34
lines changed

Cargo.toml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
[package]
22
name = "bfield"
3-
version = "0.1.2"
3+
version = "0.1.3"
44
authors = ["Roderick Bovee <roderick@onecodex.com>"]
5+
edition = "2018"
56

67
[dependencies]
78
bincode = "0.9.2"

src/bfield.rs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@ use std::path::Path;
44
use serde::Serialize;
55
use serde::de::DeserializeOwned;
66

7-
use bfield_member::{BFieldLookup, BFieldMember, BFieldVal};
8-
use marker::{to_marker};
7+
use crate::bfield_member::{BFieldLookup, BFieldMember, BFieldVal};
8+
use crate::marker::{to_marker};
99

1010

1111
pub struct BField<T> {
@@ -57,7 +57,7 @@ impl<'a, T: Clone + DeserializeOwned + Serialize> BField<T> {
5757
let _ = to_marker(0, n_marker_bits);
5858

5959
Ok(BField {
60-
members: members,
60+
members,
6161
read_only: false,
6262
})
6363
}
@@ -81,15 +81,15 @@ impl<'a, T: Clone + DeserializeOwned + Serialize> BField<T> {
8181
members.push(member);
8282
n += 1;
8383
}
84-
if members.len() == 0 {
84+
if members.is_empty() {
8585
return Err(io::Error::new(
8686
io::ErrorKind::NotFound,
8787
format!("No Bfield found at {:?}", filename.as_ref())
8888
));
8989
}
9090
Ok(BField {
91-
members: members,
92-
read_only: read_only,
91+
members,
92+
read_only,
9393
})
9494
}
9595

@@ -114,7 +114,7 @@ impl<'a, T: Clone + DeserializeOwned + Serialize> BField<T> {
114114
n += 1;
115115
}
116116
Ok(BField {
117-
members: members,
117+
members,
118118
read_only: true,
119119
})
120120
}

src/bfield_member.rs

Lines changed: 12 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -4,19 +4,17 @@ use std::fs::File;
44
#[cfg(feature = "prefetching")]
55
use std::intrinsics;
66
use std::io;
7-
use std::ops::Range;
87
use std::path::Path;
98

109
use bincode::{serialize, deserialize, Infinite};
1110
use mmap_bitvec::{BitVector, MmapBitVec, BitVecSlice};
12-
use mmap_bitvec::bitvec::BIT_VEC_SLICE_SIZE;
1311
use murmurhash3::murmurhash3_x64_128;
1412
use serde::Serialize;
1513
use serde::de::DeserializeOwned;
1614
#[cfg(feature = "legacy")]
1715
use serde_json;
1816

19-
use marker::{from_marker, to_marker};
17+
use crate::marker::{from_marker, to_marker};
2018

2119

2220
#[derive(Debug, Deserialize, Serialize)]
@@ -55,9 +53,9 @@ impl<T: Clone + DeserializeOwned + Serialize> BFieldMember<T> {
5553
P: AsRef<Path>,
5654
{
5755
let bf_params = BFieldParams {
58-
n_hashes: n_hashes,
59-
marker_width: marker_width,
60-
n_marker_bits: n_marker_bits,
56+
n_hashes,
57+
marker_width,
58+
n_marker_bits,
6159
other: other_params,
6260
};
6361

@@ -121,9 +119,9 @@ impl<T: Clone + DeserializeOwned + Serialize> BFieldMember<T> {
121119
n_marker_bits: u8,
122120
) -> Result<Self, io::Error> {
123121
let bf_params = BFieldParams {
124-
n_hashes: n_hashes,
125-
marker_width: marker_width,
126-
n_marker_bits: n_marker_bits,
122+
n_hashes,
123+
marker_width,
124+
n_marker_bits,
127125
other: None,
128126
};
129127

@@ -230,9 +228,8 @@ impl<T: Clone + DeserializeOwned + Serialize> BFieldMember<T> {
230228
}
231229

232230
assert!(self.params.n_hashes <= 16);
233-
for marker_ix in 0usize..self.params.n_hashes as usize {
234-
let pos = positions[marker_ix];
235-
let marker = self.bitvec.get_range(pos..pos + marker_width);
231+
for pos in positions.iter().take(self.params.n_hashes as usize) {
232+
let marker = self.bitvec.get_range(*pos..*pos + marker_width);
236233
merged_marker &= marker;
237234
if merged_marker.count_ones() < k {
238235
return 0;
@@ -305,16 +302,16 @@ fn test_bfield() {
305302

306303
#[test]
307304
fn test_bfield_collisions() {
308-
// comically small bfield with too many hashes to cause saturation
309-
let mut bfield: BFieldMember<usize> = BFieldMember::in_memory(128, 100, 16, 4).unwrap();
305+
// comically small bfield with too many (16) hashes
306+
// and too many bits (8) to cause saturation
307+
let mut bfield: BFieldMember<usize> = BFieldMember::in_memory(128, 16, 64, 8).unwrap();
310308

311309
bfield.insert(b"test", 100);
312310
assert_eq!(bfield.get(b"test"), BFieldLookup::Indeterminate);
313311
}
314312

315313
#[test]
316314
fn test_bfield_bits_set() {
317-
// comically small bfield with too many hashes to cause saturation
318315
let mut bfield: BFieldMember<usize> = BFieldMember::in_memory(128, 2, 16, 4).unwrap();
319316

320317
bfield.insert(b"test", 100);

src/lib.rs

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,12 @@
11
#![cfg_attr(feature = "marker_lookup", feature(const_fn))]
22
#![cfg_attr(feature = "prefetching", feature(core_intrinsics))]
3-
extern crate bincode;
4-
extern crate mmap_bitvec;
5-
extern crate murmurhash3;
6-
extern crate serde;
3+
74
#[macro_use]
85
extern crate serde_derive;
9-
#[cfg(feature = "legacy")]
10-
extern crate serde_json;
116

127
mod bfield;
138
mod bfield_member;
149
mod marker;
1510

16-
pub use bfield::BField;
17-
pub use bfield_member::BFieldVal;
11+
pub use crate::bfield::BField;
12+
pub use crate::bfield_member::BFieldVal;

src/marker.rs

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
#![cfg_attr(feature = "const_fn", feature(marker_lookup))]
22

33
use mmap_bitvec::BitVecSlice;
4-
use bfield_member::BFieldVal;
4+
5+
use crate::bfield_member::BFieldVal;
56

67
#[cfg(feature = "marker_lookup")]
78
const MARKER_TABLE_SIZE: usize = 200000;
@@ -12,14 +13,22 @@ static mut MARKER_BITS: u8 = 0;
1213

1314
#[cfg(feature = "marker_lookup")]
1415
pub fn to_marker(value: BFieldVal, k: u8) -> BitVecSlice {
16+
// note that you can only test this feature with
17+
// `RUST_TEST_THREADS=1 cargo test` or else you'll get tons of
18+
// errors because of data races between threads with different k's
19+
20+
// also some tests (i.e. ones with k=1) fail because there are fewer
21+
// than 200000 possible values for the table
1522
unsafe {
23+
// clear out the lookup table if we have a new k and fill
24+
// it with values for the new k
1625
if MARKER_BITS != k {
17-
MARKER_BITS = k;
1826
MARKER_TABLE = [0; MARKER_TABLE_SIZE];
1927
MARKER_TABLE[0] = (1 << k) - 1 as BitVecSlice;
2028
for i in 1..MARKER_TABLE_SIZE {
2129
MARKER_TABLE[i] = next_marker(MARKER_TABLE[i - 1]);
2230
}
31+
MARKER_BITS = k;
2332
}
2433
if value as usize >= MARKER_TABLE_SIZE {
2534
let mut marker = MARKER_TABLE[MARKER_TABLE_SIZE - 1];
@@ -64,7 +73,7 @@ pub fn from_marker(marker: BitVecSlice) -> BFieldVal {
6473
let mut value = 0u64;
6574
let mut idx = 0;
6675
while working_marker != 0 {
67-
let rank = working_marker.trailing_zeros() as u64;
76+
let rank = u64::from(working_marker.trailing_zeros());
6877
working_marker -= 1 << rank;
6978
idx += 1;
7079
value += choose(rank, idx);

0 commit comments

Comments
 (0)