diff --git a/Cargo.toml b/Cargo.toml index 37c3651..fcd0481 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -21,6 +21,7 @@ name = "ex1" [features] default = [] with_serde = ["serde/derive"] +sort_unstable = [] [dependencies] num-traits = "0.2.12" diff --git a/src/lib.rs b/src/lib.rs index b76a136..c950d9b 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -194,11 +194,27 @@ where /// let lapper = Lapper::new(data); /// ``` pub fn new(mut intervals: Vec>) -> Self { + #[cfg(feature = "sort_unstable")] + intervals.sort_unstable(); + + #[cfg(not(feature = "sort_unstable"))] intervals.sort(); + let (mut starts, mut stops): (Vec<_>, Vec<_>) = intervals.iter().map(|x| (x.start, x.stop)).unzip(); - starts.sort(); - stops.sort(); + + #[cfg(feature = "sort_unstable")] + { + starts.sort_unstable(); + stops.sort_unstable(); + } + + #[cfg(not(feature = "sort_unstable"))] + { + starts.sort(); + stops.sort(); + } + let mut max_len = zero::(); for interval in intervals.iter() { let i_len = interval @@ -376,8 +392,19 @@ where // Fix the starts and stops used by counts let (mut starts, mut stops): (Vec<_>, Vec<_>) = self.intervals.iter().map(|x| (x.start, x.stop)).unzip(); - starts.sort(); - stops.sort(); + + #[cfg(feature = "sort_unstable")] + { + starts.sort_unstable(); + stops.sort_unstable(); + } + + #[cfg(not(feature = "sort_unstable"))] + { + starts.sort(); + stops.sort(); + } + self.starts = starts; self.stops = stops; self.max_len = self