diff options
Diffstat (limited to 'src/lazy_buffer.rs')
-rw-r--r-- | src/lazy_buffer.rs | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/src/lazy_buffer.rs b/src/lazy_buffer.rs index 01123d4..fa514ec 100644 --- a/src/lazy_buffer.rs +++ b/src/lazy_buffer.rs @@ -1,4 +1,5 @@ use std::ops::Index; +use alloc::vec::Vec; #[derive(Debug, Clone)] pub struct LazyBuffer<I: Iterator> { @@ -23,10 +24,6 @@ where self.buffer.len() } - pub fn is_done(&self) -> bool { - self.done - } - pub fn get_next(&mut self) -> bool { if self.done { return false; @@ -43,6 +40,17 @@ where } } } + + pub fn prefill(&mut self, len: usize) { + let buffer_len = self.buffer.len(); + + if !self.done && len > buffer_len { + let delta = len - buffer_len; + + self.buffer.extend(self.it.by_ref().take(delta)); + self.done = self.buffer.len() < len; + } + } } impl<I, J> Index<J> for LazyBuffer<I> |