Skip to main content

range_set_blaze/
lib.rs

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