Skip to content

Commit 541bed1

Browse files
wip fix
1 parent 9ff30c6 commit 541bed1

File tree

3 files changed

+20
-16
lines changed

3 files changed

+20
-16
lines changed

src/lib.rs

+6-3
Original file line numberDiff line numberDiff line change
@@ -95,12 +95,12 @@ mod unhash;
9595

9696
use error::Error;
9797
use std::borrow::{Borrow, BorrowMut};
98+
use swisstable_group_query::REFERENCE_GROUP_SIZE;
9899

99100
pub use crate::fxhash::FxHashFn;
100101
pub use crate::unhash::UnHashFn;
101102

102103
use crate::raw_table::{ByteArray, RawIter, RawTable, RawTableMut};
103-
use crate::swisstable_group_query::GROUP_SIZE;
104104

105105
/// This trait provides a complete "configuration" for a hash table, i.e. it
106106
/// defines the key and value types, how these are encoded and what hash
@@ -527,7 +527,7 @@ fn slots_needed(item_count: usize, max_load_factor: Factor) -> usize {
527527
let slots_needed = max_load_factor.apply_inverse(item_count);
528528
std::cmp::max(
529529
slots_needed.checked_next_power_of_two().unwrap(),
530-
GROUP_SIZE,
530+
REFERENCE_GROUP_SIZE,
531531
)
532532
}
533533

@@ -708,7 +708,10 @@ mod tests {
708708

709709
#[test]
710710
fn load_factor_and_item_count() {
711-
assert_eq!(slots_needed(0, Factor::from_percent(100)), GROUP_SIZE);
711+
assert_eq!(
712+
slots_needed(0, Factor::from_percent(100)),
713+
REFERENCE_GROUP_SIZE
714+
);
712715
assert_eq!(slots_needed(6, Factor::from_percent(60)), 16);
713716
assert_eq!(slots_needed(5, Factor::from_percent(50)), 16);
714717
assert_eq!(slots_needed(5, Factor::from_percent(49)), 16);

src/memory_layout.rs

+6-5
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,12 @@ use std::{
55
mem::{align_of, size_of},
66
};
77

8-
use crate::Config;
98
use crate::{
109
error::Error,
1110
raw_table::{Entry, EntryMetadata, RawTable},
12-
swisstable_group_query::GROUP_SIZE,
1311
Factor,
1412
};
13+
use crate::{swisstable_group_query::REFERENCE_GROUP_SIZE, Config};
1514

1615
const CURRENT_FILE_FORMAT_VERSION: [u8; 4] = [0, 0, 0, 1];
1716

@@ -223,7 +222,7 @@ where
223222
let entry_metadata = unsafe {
224223
std::slice::from_raw_parts(
225224
raw_bytes.as_ptr().offset(metadata_offset) as *const EntryMetadata,
226-
slot_count + GROUP_SIZE,
225+
slot_count + REFERENCE_GROUP_SIZE,
227226
)
228227
};
229228

@@ -291,7 +290,7 @@ where
291290
let entry_metadata = unsafe {
292291
std::slice::from_raw_parts_mut(
293292
raw_bytes.as_mut_ptr().offset(metadata_offset) as *mut EntryMetadata,
294-
slot_count + GROUP_SIZE,
293+
slot_count + REFERENCE_GROUP_SIZE,
295294
)
296295
};
297296

@@ -327,7 +326,9 @@ pub(crate) fn bytes_needed<C: Config>(slot_count: usize) -> usize {
327326
let size_of_entry = size_of::<Entry<C::EncodedKey, C::EncodedValue>>();
328327
let size_of_metadata = size_of::<EntryMetadata>();
329328

330-
HEADER_SIZE + slot_count * size_of_entry + (slot_count + GROUP_SIZE) * size_of_metadata
329+
HEADER_SIZE
330+
+ slot_count * size_of_entry
331+
+ (slot_count + REFERENCE_GROUP_SIZE) * size_of_metadata
331332
}
332333

333334
pub(crate) fn allocate<C: Config>(

src/raw_table.rs

+8-8
Original file line numberDiff line numberDiff line change
@@ -186,7 +186,7 @@ where
186186
assert!(std::mem::align_of::<Entry<K, V>>() == 1);
187187

188188
debug_assert!(data.len().is_power_of_two());
189-
debug_assert!(metadata.len() == data.len() + GROUP_SIZE);
189+
debug_assert!(metadata.len() == data.len() + REFERENCE_GROUP_SIZE);
190190

191191
Self {
192192
metadata,
@@ -198,7 +198,7 @@ where
198198
#[inline]
199199
pub(crate) fn find(&self, key: &K) -> Option<&V> {
200200
debug_assert!(self.data.len().is_power_of_two());
201-
debug_assert!(self.metadata.len() == self.data.len() + GROUP_SIZE);
201+
debug_assert!(self.metadata.len() == self.data.len() + REFERENCE_GROUP_SIZE);
202202

203203
let mask = self.data.len() - 1;
204204
let hash = H::hash(key.as_slice());
@@ -308,7 +308,7 @@ where
308308
assert!(std::mem::align_of::<Entry<K, V>>() == 1);
309309

310310
debug_assert!(data.len().is_power_of_two());
311-
debug_assert_eq!(metadata.len(), data.len() + GROUP_SIZE);
311+
debug_assert_eq!(metadata.len(), data.len() + REFERENCE_GROUP_SIZE);
312312

313313
Self {
314314
metadata,
@@ -324,7 +324,7 @@ where
324324
#[inline]
325325
pub(crate) fn insert(&mut self, key: K, value: V) -> Option<V> {
326326
debug_assert!(self.data.len().is_power_of_two());
327-
debug_assert!(self.metadata.len() == self.data.len() + GROUP_SIZE);
327+
debug_assert!(self.metadata.len() == self.data.len() + REFERENCE_GROUP_SIZE);
328328

329329
let mask = self.data.len() - 1;
330330
let hash = H::hash(key.as_slice());
@@ -352,11 +352,11 @@ where
352352
*entry_at_mut(self.data, index) = Entry::new(key, value);
353353
*metadata_at_mut(self.metadata, index) = h2;
354354

355-
if index < GROUP_SIZE {
355+
if index < REFERENCE_GROUP_SIZE {
356356
let first_mirror = self.data.len();
357357
*metadata_at_mut(self.metadata, first_mirror + index) = h2;
358358
debug_assert_eq!(
359-
self.metadata[..GROUP_SIZE],
359+
self.metadata[..REFERENCE_GROUP_SIZE],
360360
self.metadata[self.data.len()..]
361361
);
362362
}
@@ -408,7 +408,7 @@ where
408408
{
409409
pub(crate) fn new(metadata: &'a [EntryMetadata], data: &'a [Entry<K, V>]) -> RawIter<'a, K, V> {
410410
debug_assert!(data.len().is_power_of_two());
411-
debug_assert!(metadata.len() == data.len() + GROUP_SIZE);
411+
debug_assert!(metadata.len() == data.len() + REFERENCE_GROUP_SIZE);
412412

413413
RawIter {
414414
metadata,
@@ -529,7 +529,7 @@ mod tests {
529529
) -> (Vec<EntryMetadata>, Vec<Entry<K, V>>) {
530530
let size = xs.size_hint().0.next_power_of_two();
531531
let mut data = vec![Entry::default(); size];
532-
let mut metadata = vec![255; size + GROUP_SIZE];
532+
let mut metadata = vec![255; size + REFERENCE_GROUP_SIZE];
533533

534534
assert!(metadata.iter().all(|b| is_empty_or_deleted(*b)));
535535

0 commit comments

Comments
 (0)