@@ -47,24 +47,6 @@ const fn var_int_max_size<VI>() -> usize {
4747#[ repr( transparent) ]
4848pub 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-
6850impl 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