range_set_blaze/
lib.rs

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