mirror of
https://github.com/librespot-org/librespot.git
synced 2024-11-08 16:45:43 +00:00
Improved RangeSet implementation
This commit is contained in:
parent
80d384e001
commit
90905b81bb
1 changed files with 8 additions and 12 deletions
|
@ -54,11 +54,7 @@ impl RangeSet {
|
|||
}
|
||||
|
||||
pub fn len(&self) -> usize {
|
||||
let mut result = 0;
|
||||
for range in self.ranges.iter() {
|
||||
result += range.length;
|
||||
}
|
||||
return result;
|
||||
self.ranges.iter().map(|r| r.length).fold(0, std::ops::Add::add)
|
||||
}
|
||||
|
||||
pub fn get_range(&self, index: usize) -> Range {
|
||||
|
@ -98,12 +94,12 @@ impl RangeSet {
|
|||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
true
|
||||
}
|
||||
|
||||
pub fn add_range(&mut self, range: &Range) {
|
||||
if range.length <= 0 {
|
||||
// the interval is empty or invalid -> nothing to do.
|
||||
if range.length == 0 {
|
||||
// the interval is empty -> nothing to do.
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -111,7 +107,7 @@ impl RangeSet {
|
|||
// the new range is clear of any ranges we already iterated over.
|
||||
if range.end() < self.ranges[index].start {
|
||||
// the new range starts after anything we already passed and ends before the next range starts (they don't touch) -> insert it.
|
||||
self.ranges.insert(index, range.clone());
|
||||
self.ranges.insert(index, *range);
|
||||
return;
|
||||
} else if range.start <= self.ranges[index].end()
|
||||
&& self.ranges[index].start <= range.end()
|
||||
|
@ -119,7 +115,7 @@ impl RangeSet {
|
|||
// the new range overlaps (or touches) the first range. They are to be merged.
|
||||
// In addition we might have to merge further ranges in as well.
|
||||
|
||||
let mut new_range = range.clone();
|
||||
let mut new_range = *range;
|
||||
|
||||
while index < self.ranges.len() && self.ranges[index].start <= new_range.end() {
|
||||
let new_end = max(new_range.end(), self.ranges[index].end());
|
||||
|
@ -134,7 +130,7 @@ impl RangeSet {
|
|||
}
|
||||
|
||||
// the new range is after everything else -> just add it
|
||||
self.ranges.push(range.clone());
|
||||
self.ranges.push(*range);
|
||||
}
|
||||
|
||||
#[allow(dead_code)]
|
||||
|
@ -152,7 +148,7 @@ impl RangeSet {
|
|||
}
|
||||
|
||||
pub fn subtract_range(&mut self, range: &Range) {
|
||||
if range.length <= 0 {
|
||||
if range.length == 0 {
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue