4949) ]
5050
5151use std:: cmp:: min;
52+ use std:: collections:: VecDeque ;
5253use std:: fs:: { rename, File , OpenOptions } ;
5354use std:: io;
5455use std:: io:: { Read , Seek , SeekFrom , Write } ;
@@ -160,7 +161,7 @@ pub struct QueueFile {
160161 write_buf : Vec < u8 > ,
161162 /// Offset cache idx->Element. Sorted in ascending order, always unique.
162163 /// Indices form perfect squares though may skew after removal.
163- cached_offsets : Vec < ( usize , Element ) > ,
164+ cached_offsets : VecDeque < ( usize , Element ) > ,
164165 /// Offset caching policy.
165166 offset_cache_kind : Option < OffsetCacheKind > ,
166167}
@@ -396,7 +397,7 @@ impl QueueFile {
396397 overwrite_on_remove,
397398 skip_write_header_on_add : false ,
398399 write_buf : Vec :: new ( ) ,
399- cached_offsets : vec ! [ ] ,
400+ cached_offsets : VecDeque :: new ( ) ,
400401 offset_cache_kind : None ,
401402 } ;
402403
@@ -514,7 +515,7 @@ impl QueueFile {
514515
515516 let i = self . elem_cnt - 1 ;
516517
517- if let Some ( ( index, elem) ) = self . cached_offsets . last ( ) {
518+ if let Some ( ( index, elem) ) = self . cached_offsets . back ( ) {
518519 if * index == i {
519520 debug_assert_eq ! ( elem. pos, self . last. pos) ;
520521 debug_assert_eq ! ( elem. len, self . last. len) ;
@@ -523,7 +524,7 @@ impl QueueFile {
523524 }
524525 }
525526
526- self . cached_offsets . push ( ( i, self . last ) ) ;
527+ self . cached_offsets . push_back ( ( i, self . last ) ) ;
527528 }
528529
529530 #[ inline]
@@ -591,7 +592,7 @@ impl QueueFile {
591592 let last_index = self . elem_cnt - 1 ;
592593 let need_to_cache = match kind {
593594 OffsetCacheKind :: Linear { offset } => {
594- let last_cached_index = self . cached_offsets . last ( ) . map_or ( 0 , |( idx, _) | * idx) ;
595+ let last_cached_index = self . cached_offsets . back ( ) . map_or ( 0 , |( idx, _) | * idx) ;
595596 last_index - last_cached_index >= offset
596597 }
597598 OffsetCacheKind :: Quadratic => {
0 commit comments