Skip to main content

range_set_blaze/
lib.rs

1#![cfg_attr(feature = "from_slice", feature(portable_simd))]
2#![doc = include_str!("../README.md")]
3#![no_std]
4#![cfg_attr(feature = "float_nightly_experimental", feature(f16))]
5#![cfg_attr(feature = "float_nightly_experimental", feature(f128))]
6
7extern crate alloc;
8#[cfg(feature = "std")]
9extern crate std;
10
11// Developer notes:
12//
13// To run tests with different settings, environment variables are recommended.
14// For example, the Windows steps to run one of the SIMD-related benchmark is:
15// ```bash
16// rustup override set nightly # use nightly compiler
17// set RUSTFLAGS=-C target-cpu=native # use current CPUs full instruction set
18// set BUILDFEATURES=from_slice # enable the from_slice feature via build.rs
19// cargo bench ingest_clumps_iter_v_slice
20// ```
21
22// FUTURE: Support serde via optional feature
23
24// Prelude: Simplified imports for common use
25pub mod prelude;
26
27// General Imports
28mod dyn_sorted_disjoint;
29
30pub use dyn_sorted_disjoint::DynSortedDisjoint;
31
32mod dyn_sorted_disjoint_map;
33pub use dyn_sorted_disjoint_map::DynSortedDisjointMap;
34
35#[cfg(feature = "float_experimental")]
36pub mod float;
37#[cfg(feature = "float_experimental")]
38pub use float::*;
39
40mod integer;
41pub use crate::integer::Integer;
42
43mod intersection_iter_map;
44pub use intersection_iter_map::IntersectionIterMap;
45
46mod iter_map;
47pub use crate::iter_map::{IntoIterMap, IterMap};
48
49mod keys;
50pub use crate::keys::{IntoKeys, Keys};
51
52mod map;
53pub use crate::map::{RangeMapBlaze, ValueRef};
54
55mod map_op;
56
57mod merge;
58pub use merge::{KMerge, Merge};
59
60mod merge_map;
61pub use merge_map::{KMergeMap, MergeMap};
62
63mod multiway;
64pub use multiway::{MultiwayRangeSetBlaze, MultiwayRangeSetBlazeRef, MultiwaySortedDisjoint};
65
66mod multiway_map;
67pub use multiway_map::{
68    MultiwayRangeMapBlaze, MultiwayRangeMapBlazeRef, MultiwaySortedDisjointMap,
69};
70
71mod not_iter;
72pub use not_iter::NotIter;
73
74mod range_values;
75pub use crate::range_values::{
76    IntoRangeValuesIter, MapIntoRangesIter, MapRangesIter, RangeValuesIter, RangeValuesToRangesIter,
77};
78
79mod ranges_iter;
80pub use crate::ranges_iter::{IntoRangesIter, RangesIter};
81
82mod set;
83#[cfg(all(not(coverage), feature = "std"))]
84pub use crate::set::demo_read_ranges_from_file;
85pub use crate::set::{IntoIter, Iter, RangeSetBlaze};
86
87mod sorted_disjoint;
88pub use sorted_disjoint::{CheckSortedDisjoint, RangeOnce, SortedDisjoint, SortedStarts};
89
90mod sorted_disjoint_map;
91pub use sorted_disjoint_map::{
92    CheckSortedDisjointMap, IntoString, SortedDisjointMap, SortedStartsMap,
93};
94
95mod sym_diff_iter;
96pub use sym_diff_iter::SymDiffIter;
97
98mod sym_diff_iter_map;
99pub use sym_diff_iter_map::SymDiffIterMap;
100
101mod union_iter;
102pub use union_iter::UnionIter;
103
104mod union_iter_map;
105pub use union_iter_map::UnionIterMap;
106
107mod unsorted_disjoint;
108pub use crate::unsorted_disjoint::AssumeSortedStarts;
109
110mod unsorted_priority_map;
111pub use crate::unsorted_priority_map::AssumePrioritySortedStartsMap;
112
113mod values;
114pub use crate::values::{IntoValues, Values};
115
116mod uint_plus_one;
117pub use uint_plus_one::UIntPlusOne;
118
119#[cfg(feature = "rog_experimental")]
120mod rog;
121#[cfg(feature = "rog_experimental")]
122#[allow(deprecated)]
123pub use rog::{Rog, RogsIter};
124#[cfg(any(test, feature = "test_util"))]
125#[doc(hidden)]
126pub mod test_util;
127
128// Internal modules
129pub(crate) mod from_slice;
130pub(crate) mod map_from_iter;
131pub(crate) mod tests_map;
132pub(crate) mod tests_set;
133
134// Helpers
135type NandMerge<T, L, R> = UnionMerge<T, NotIter<T, L>, NotIter<T, R>>;
136type NandKMerge<T, I> = UnionKMerge<T, NotIter<T, I>>;
137type DifferenceMapInternal<T, VR, L, R> = IntersectionIterMap<T, VR, L, NotIter<T, R>>;
138type IntersectionMapInternal<T, I> = NotIter<T, NandKMerge<T, I>>;
139
140// Public Types
141#[doc(hidden)]
142pub type DifferenceMap<T, VR, L, R> =
143    DifferenceMapInternal<T, VR, L, RangeValuesToRangesIter<T, VR, R>>;
144#[doc(hidden)]
145pub type DifferenceMerge<T, L, R> = NotIter<T, UnionMerge<T, NotIter<T, L>, R>>;
146
147#[doc(hidden)]
148pub type IntersectionKMap<'a, T, VR, I> =
149    IntersectionIterMap<T, VR, I, IntersectionMapInternal<T, RangeValuesToRangesIter<T, VR, I>>>;
150#[doc(hidden)]
151pub type IntersectionMap<T, VR, L, R> =
152    IntersectionIterMap<T, VR, R, RangeValuesToRangesIter<T, VR, L>>;
153#[doc(hidden)]
154pub type IntersectionMerge<T, L, R> = NotIter<T, NandMerge<T, L, R>>;
155
156#[doc(hidden)]
157pub type NotMap<T, VR, I> = NotIter<T, RangeValuesToRangesIter<T, VR, I>>;
158
159#[doc(hidden)]
160pub type SymDiffKMerge<T, II> = SymDiffIter<T, KMerge<T, II>>;
161#[doc(hidden)]
162pub type SymDiffKMergeMap<T, VR, II> = SymDiffIterMap<T, VR, KMergeMap<T, VR, II>>;
163#[doc(hidden)]
164pub type SymDiffMerge<T, L, R> = SymDiffIter<T, Merge<T, L, R>>;
165#[doc(hidden)]
166pub type SymDiffMergeMap<T, VR, L, R> = SymDiffIterMap<T, VR, MergeMap<T, VR, L, R>>;
167
168#[doc(hidden)]
169pub type UnionKMerge<T, I> = UnionIter<T, KMerge<T, I>>;
170#[doc(hidden)]
171pub type UnionKMergeMap<T, VR, I> = UnionIterMap<T, VR, KMergeMap<T, VR, I>>;
172#[doc(hidden)]
173pub type UnionMerge<T, L, R> = UnionIter<T, merge::Merge<T, L, R>>;
174#[doc(hidden)]
175pub type UnionMergeMap<T, VR, L, R> = UnionIterMap<T, VR, MergeMap<T, VR, L, R>>;