Skip to main content

braid_core/vendor/rle/
mod.rs

1use std::fmt::Debug;
2
3pub use append_rle::AppendRle;
4pub use splitable_span::*;
5pub use merge_iter::*;
6use std::ops::Range;
7
8mod splitable_span;
9mod merge_iter;
10mod append_rle;
11pub mod zip;
12pub mod take_max_iter;
13pub mod intersect;
14pub mod rlerun;
15// mod gapbuffer;
16// pub mod iter_ctx;
17
18pub use rlerun::{RleRun, RleDRun};
19
20pub trait Searchable {
21    type Item: Copy + Debug;
22
23    // This is strictly unnecessary given truncate(), but it makes some code cleaner.
24    // fn truncate_keeping_right(&mut self, at: usize) -> Self;
25
26    /// Checks if the entry contains the specified item. If it does, returns the offset into the
27    /// item.
28    fn get_offset(&self, loc: Self::Item) -> Option<usize>;
29
30    // I'd use Index for this but the index trait returns a reference.
31    // fn at_offset(&self, offset: usize) -> Self::Item;
32    fn at_offset(&self, offset: usize) -> Self::Item;
33}
34
35pub trait HasRleKey {
36    fn rle_key(&self) -> usize;
37}
38
39impl<T> HasRleKey for &T where T: HasRleKey {
40    fn rle_key(&self) -> usize {
41        (*self).rle_key()
42    }
43}
44
45impl HasRleKey for Range<usize> {
46    fn rle_key(&self) -> usize {
47        self.start
48    }
49}
50
51impl HasRleKey for Range<u32> {
52    fn rle_key(&self) -> usize {
53        self.start as _
54    }
55}