1#![no_std]
2#![cfg_attr(feature = "nightly", feature(allocator_api))]
3
4extern crate alloc;
5#[cfg(feature = "std")]
6extern crate std;
7
8pub(crate) mod prelude;
9
10pub mod comp;
11pub mod decomp;
12pub mod util;
13
14#[cfg(test)]
15pub mod test_prelude;
16
17#[cfg(feature = "c-exports")]
18pub mod exports;
19
20pub mod impls {
21    pub mod comp {
22        pub mod comp_dict;
23        pub mod compress;
24        pub mod lz77_matcher;
25    }
26
27    pub mod decomp {
28        pub(crate) mod common;
29        pub mod decompress;
30        pub mod estimate;
31    }
32}
33
34pub trait ReadOnlyPointerSrc {
35    fn as_ptr(&self) -> *const u8;
36}
37
38impl ReadOnlyPointerSrc for &[u8] {
39    fn as_ptr(&self) -> *const u8 {
40        (*self).as_ptr()
41    }
42}
43
44impl ReadOnlyPointerSrc for *const u8 {
45    fn as_ptr(&self) -> *const u8 {
46        *self
47    }
48}
49
50pub trait MutablePointerSrc {
51    fn as_mut_ptr(&mut self) -> *mut u8;
52}
53
54impl MutablePointerSrc for &mut [u8] {
55    fn as_mut_ptr(&mut self) -> *mut u8 {
56        (*self).as_mut_ptr()
57    }
58}
59
60impl MutablePointerSrc for *mut u8 {
61    fn as_mut_ptr(&mut self) -> *mut u8 {
62        *self
63    }
64}