From a7426148329f6ad1c0992494fea7ff1e97d15393 Mon Sep 17 00:00:00 2001 From: YouROK <8yourok8@mail.ru> Date: Tue, 22 Dec 2020 13:15:07 +0300 Subject: [PATCH] add ranges --- src/server/torr/storage/torrstor/ranges.go | 49 ++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 src/server/torr/storage/torrstor/ranges.go diff --git a/src/server/torr/storage/torrstor/ranges.go b/src/server/torr/storage/torrstor/ranges.go new file mode 100644 index 0000000..703c7db --- /dev/null +++ b/src/server/torr/storage/torrstor/ranges.go @@ -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] +}