mirror of
https://github.com/quickwit-oss/tantivy.git
synced 2026-01-08 01:52:54 +00:00
42 lines
949 B
Rust
42 lines
949 B
Rust
use std::sync::Arc;
|
|
|
|
#[derive(Clone)]
|
|
pub struct SharedVecSlice {
|
|
pub data: Arc<Vec<u8>>,
|
|
pub start: usize,
|
|
pub len: usize,
|
|
}
|
|
|
|
impl SharedVecSlice {
|
|
pub fn empty() -> SharedVecSlice {
|
|
SharedVecSlice::new(Arc::new(Vec::new()))
|
|
}
|
|
|
|
pub fn new(data: Arc<Vec<u8>>) -> SharedVecSlice {
|
|
let data_len = data.len();
|
|
SharedVecSlice {
|
|
data,
|
|
start: 0,
|
|
len: data_len,
|
|
}
|
|
}
|
|
|
|
pub fn as_slice(&self) -> &[u8] {
|
|
&self.data[self.start..self.start + self.len]
|
|
}
|
|
|
|
pub fn slice(&self, from_offset: usize, to_offset: usize) -> SharedVecSlice {
|
|
SharedVecSlice {
|
|
data: Arc::clone(&self.data),
|
|
start: self.start + from_offset,
|
|
len: to_offset - from_offset,
|
|
}
|
|
}
|
|
}
|
|
|
|
impl From<Vec<u8>> for SharedVecSlice {
|
|
fn from(data: Vec<u8>) -> SharedVecSlice {
|
|
SharedVecSlice::new(Arc::new(data))
|
|
}
|
|
}
|