Skip to content

Commit a8a7f47

Browse files
fix: fix review
1 parent 899b028 commit a8a7f47

File tree

2 files changed

+20
-36
lines changed

2 files changed

+20
-36
lines changed

storage/src/checker/mod.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -836,7 +836,7 @@ mod test {
836836
}
837837
high_watermark += area_size;
838838
}
839-
freelist[area_index] = next_free_block;
839+
freelist.as_array_mut()[area_index.as_usize()] = next_free_block;
840840
if num_free_areas > 0 {
841841
free_area_counts.insert(area_size, num_free_areas);
842842
}
@@ -900,7 +900,7 @@ mod test {
900900
next_free_block1 = Some(free_list1_area1);
901901
high_watermark += area_size1;
902902

903-
free_lists[AREA_INDEX1] = next_free_block1;
903+
free_lists.as_array_mut()[AREA_INDEX1.as_usize()] = next_free_block1;
904904

905905
// second free list
906906
let area_size2 = AREA_INDEX2.size();
@@ -916,12 +916,12 @@ mod test {
916916
next_free_block2 = Some(free_list2_area1);
917917
high_watermark += area_size2;
918918

919-
free_lists[AREA_INDEX2] = next_free_block2;
919+
free_lists.as_array_mut()[AREA_INDEX2.as_usize()] = next_free_block2;
920920

921921
// write header
922922
test_write_header(&mut nodestore, high_watermark, None, free_lists);
923923

924-
let expected_start_addr = free_lists[AREA_INDEX1].unwrap();
924+
let expected_start_addr = free_lists.as_array()[AREA_INDEX1.as_usize()].unwrap();
925925
let expected_end_addr = LinearAddress::new(high_watermark).unwrap();
926926
let expected_free_areas = vec![expected_start_addr..expected_end_addr];
927927
let expected_freelist_errors = vec![CheckerError::AreaIntersects {

storage/src/nodestore/alloc.rs

Lines changed: 16 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -47,24 +47,6 @@ const fn var_int_max_size<VI>() -> usize {
4747
#[repr(transparent)]
4848
pub struct FreeLists([Option<LinearAddress>; AreaIndex::NUM_AREA_SIZES]);
4949

50-
impl std::ops::Index<AreaIndex> for FreeLists {
51-
type Output = Option<LinearAddress>;
52-
53-
fn index(&self, index: AreaIndex) -> &Self::Output {
54-
self.0
55-
.get(index.as_usize())
56-
.expect("AreaIndex is guaranteed to be within bounds")
57-
}
58-
}
59-
60-
impl std::ops::IndexMut<AreaIndex> for FreeLists {
61-
fn index_mut(&mut self, index: AreaIndex) -> &mut Self::Output {
62-
self.0
63-
.get_mut(index.as_usize())
64-
.expect("AreaIndex is guaranteed to be within bounds")
65-
}
66-
}
67-
6850
impl FreeLists {
6951
/// Get a reference to the underlying array.
7052
pub const fn as_array(&self) -> &[Option<LinearAddress>; AreaIndex::NUM_AREA_SIZES] {
@@ -411,16 +393,18 @@ impl<S: WritableStorage> NodeAllocator<'_, S> {
411393

412394
// The area that contained the node is now free.
413395
let mut stored_area_bytes = Vec::new();
414-
FreeArea::new(self.header.free_lists()[area_size_index])
396+
FreeArea::new(self.header.free_lists().as_array()[area_size_index.as_usize()])
415397
.as_bytes(area_size_index, &mut stored_area_bytes);
416398

417399
self.storage.write(addr.into(), &stored_area_bytes)?;
418400

419-
self.storage
420-
.add_to_free_list_cache(addr, self.header.free_lists()[area_size_index]);
401+
self.storage.add_to_free_list_cache(
402+
addr,
403+
self.header.free_lists().as_array()[area_size_index.as_usize()],
404+
);
421405

422406
// The newly freed block is now the head of the free list.
423-
self.header.free_lists_mut()[area_size_index] = Some(addr);
407+
self.header.free_lists_mut().as_array_mut()[area_size_index.as_usize()] = Some(addr);
424408

425409
Ok(())
426410
}
@@ -801,7 +785,7 @@ mod tests {
801785
next_free_block1 = Some(free_list1_area1);
802786
offset += area_size1;
803787

804-
free_lists[area_index1] = next_free_block1;
788+
free_lists.as_array_mut()[area_index1.as_usize()] = next_free_block1;
805789

806790
// second free list
807791
let area_index2 = AreaIndex::new(
@@ -823,7 +807,7 @@ mod tests {
823807
next_free_block2 = Some(free_list2_area1);
824808
offset += area_size2;
825809

826-
free_lists[area_index2] = next_free_block2;
810+
free_lists.as_array_mut()[area_index2.as_usize()] = next_free_block2;
827811

828812
// write header
829813
test_write_header(&mut nodestore, offset, None, free_lists);
@@ -919,7 +903,7 @@ mod tests {
919903
next_free_block1 = Some(free_list1_area1);
920904
offset += area_size1;
921905

922-
free_lists[AREA_INDEX1] = next_free_block1;
906+
free_lists.as_array_mut()[AREA_INDEX1.as_usize()] = next_free_block1;
923907

924908
// second free list
925909
assert_ne!(AREA_INDEX1, AREA_INDEX2);
@@ -936,7 +920,7 @@ mod tests {
936920
next_free_block2 = Some(free_list2_area1);
937921
offset += area_size2;
938922

939-
free_lists[AREA_INDEX2] = next_free_block2;
923+
free_lists.as_array_mut()[AREA_INDEX2.as_usize()] = next_free_block2;
940924

941925
// write header
942926
test_write_header(&mut nodestore, offset, None, free_lists);
@@ -1027,16 +1011,16 @@ mod tests {
10271011
let index2 = AreaIndex::MAX;
10281012

10291013
// Set values using AreaIndex
1030-
free_lists[index1] = Some(addr1);
1031-
free_lists[index2] = Some(addr2);
1014+
free_lists.as_array_mut()[index1.as_usize()] = Some(addr1);
1015+
free_lists.as_array_mut()[index2.as_usize()] = Some(addr2);
10321016

10331017
// Get values using AreaIndex
1034-
assert_eq!(free_lists[index1], Some(addr1));
1035-
assert_eq!(free_lists[index2], Some(addr2));
1018+
assert_eq!(free_lists.as_array()[index1.as_usize()], Some(addr1));
1019+
assert_eq!(free_lists.as_array()[index2.as_usize()], Some(addr2));
10361020

10371021
// Test indexing with usize (backward compatibility)
1038-
free_lists[AreaIndex::MIN] = None;
1039-
assert_eq!(free_lists[AreaIndex::MIN], None);
1022+
free_lists.as_array_mut()[AreaIndex::MIN.as_usize()] = None;
1023+
assert_eq!(free_lists.as_array()[AreaIndex::MIN.as_usize()], None);
10401024

10411025
assert_eq!(free_lists.iter().count(), AreaIndex::NUM_AREA_SIZES);
10421026

0 commit comments

Comments
 (0)