mirror of https://github.com/helix-editor/helix
search buffer contents during global search (#5652)
parent
541d2b76d6
commit
1adb19464f
@ -0,0 +1,37 @@
|
|||||||
|
use std::io;
|
||||||
|
|
||||||
|
use ropey::iter::Chunks;
|
||||||
|
use ropey::RopeSlice;
|
||||||
|
|
||||||
|
pub struct RopeReader<'a> {
|
||||||
|
current_chunk: &'a [u8],
|
||||||
|
chunks: Chunks<'a>,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<'a> RopeReader<'a> {
|
||||||
|
pub fn new(rope: RopeSlice<'a>) -> RopeReader<'a> {
|
||||||
|
RopeReader {
|
||||||
|
current_chunk: &[],
|
||||||
|
chunks: rope.chunks(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl io::Read for RopeReader<'_> {
|
||||||
|
fn read(&mut self, mut buf: &mut [u8]) -> io::Result<usize> {
|
||||||
|
let buf_len = buf.len();
|
||||||
|
loop {
|
||||||
|
let read_bytes = self.current_chunk.read(buf)?;
|
||||||
|
buf = &mut buf[read_bytes..];
|
||||||
|
if buf.is_empty() {
|
||||||
|
return Ok(buf_len);
|
||||||
|
}
|
||||||
|
|
||||||
|
if let Some(next_chunk) = self.chunks.next() {
|
||||||
|
self.current_chunk = next_chunk.as_bytes();
|
||||||
|
} else {
|
||||||
|
return Ok(buf_len - buf.len());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue