bra/lib.rs
1//! Buffered Random Access (BRA) provides easy random memory access to a
2//! sequential source of data. This is achieved by greedily retaining all
3//! memory read from a given source, or by keeping a way to reset the
4//! source to the beginning for multiple passes.
5//!
6//! # Examples
7//!
8//! [`GreedyAccessReader`] can be either used as a buffered reader or as
9//! a random memory access descriptor. The amount of data read does
10//! not influence the relative index of the data unless the method
11//! [`clear`] is called.
12//!
13//! [`GreedyAccessReader`]: ./struct.GreedyAccessReader.html
14//! [`clear`]: ./struct.GreedyAccessReader.html#method.clear
15//!
16//! ```
17//! # use bra::GreedyAccessReader;
18//! # use std::io::Read;
19//! # fn get_reader() -> impl Read {
20//! # std::io::repeat(1)
21//! # }
22//! # fn run() -> Result<(), Box<dyn std::error::Error>> {
23//! let reader = get_reader();
24//! let mut reader = GreedyAccessReader::new(reader);
25//!
26//! // random access to bytes!
27//! let k: u8 = reader.get(12)?;
28//! // random slicing!
29//! let s: &[u8] = reader.slice(20..48)?;
30//! assert_eq!(s.len(), 28);
31//! // also functions as a buffered reader
32//! let mut chunk = [0; 20];
33//! reader.read_exact(&mut chunk)?;
34//! # Ok(())
35//! # }
36//! # run().unwrap();
37//! ```
38
39mod greedy;
40pub use crate::greedy::GreedyAccessReader;