Skip to content

Commit 37c8042

Browse files
authored
Merge pull request #21 from ing-systems/switch-to-vecdeque
Use VecDeque instead of Vec for offset cache.
2 parents aa89c0c + b44a2ad commit 37c8042

File tree

1 file changed

+6
-5
lines changed

1 file changed

+6
-5
lines changed

src/lib.rs

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@
4949
)]
5050

5151
use std::cmp::min;
52+
use std::collections::VecDeque;
5253
use std::fs::{rename, File, OpenOptions};
5354
use std::io;
5455
use 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

Comments
 (0)