mirror of
https://github.com/Ernous/TorrServerJellyfin.git
synced 2025-12-19 21:46:11 +05:00
add ranges
This commit is contained in:
49
src/server/torr/storage/torrstor/ranges.go
Normal file
49
src/server/torr/storage/torrstor/ranges.go
Normal file
@@ -0,0 +1,49 @@
|
||||
package torrstor
|
||||
|
||||
import (
|
||||
"sort"
|
||||
)
|
||||
|
||||
type Range struct {
|
||||
Start, End int
|
||||
}
|
||||
|
||||
func inRanges(ranges []Range, ind int) bool {
|
||||
for _, r := range ranges {
|
||||
if ind >= r.Start && ind <= r.End {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func mergeRange(ranges []Range) []Range {
|
||||
if len(ranges) <= 1 {
|
||||
return ranges
|
||||
}
|
||||
// copy ranges
|
||||
merged := append([]Range(nil), ranges...)
|
||||
|
||||
sort.Slice(merged, func(i, j int) bool {
|
||||
if merged[i].Start < merged[j].Start {
|
||||
return true
|
||||
}
|
||||
if merged[i].Start == merged[j].Start && merged[i].End < merged[j].End {
|
||||
return true
|
||||
}
|
||||
return false
|
||||
})
|
||||
|
||||
j := 0
|
||||
for i := 1; i < len(merged); i++ {
|
||||
if merged[j].End >= merged[i].Start {
|
||||
if merged[j].End < merged[i].End {
|
||||
merged[j].End = merged[i].End
|
||||
}
|
||||
} else {
|
||||
j++
|
||||
merged[j] = merged[i]
|
||||
}
|
||||
}
|
||||
return merged[:j+1]
|
||||
}
|
||||
Reference in New Issue
Block a user