internal IReadOnlyList <NormalizedHttpRangeItem> Normalize(long totalLength) { var rangeItems = RangeItems.Select(x => x.Normalize(totalLength)) .OrderBy(x => x.From).ThenBy(x => x.To); var result = new List <NormalizedHttpRangeItem>(); NormalizedHttpRangeItem currentRangeItem = null; long currentTo = 0; foreach (var rangeItem in rangeItems) { if (currentRangeItem == null) { currentRangeItem = rangeItem; currentTo = rangeItem.To; } else { var currentFrom = rangeItem.From; if (currentFrom <= (currentTo + 1)) { currentRangeItem = new NormalizedHttpRangeItem(currentRangeItem.From, rangeItem.To); } else { result.Add(currentRangeItem); currentRangeItem = rangeItem; currentTo = rangeItem.To; } } } if (currentRangeItem != null) { result.Add(currentRangeItem); } return(result); }
internal IReadOnlyList<NormalizedHttpRangeItem> Normalize(long totalLength) { var rangeItems = RangeItems.Select(x => x.Normalize(totalLength)) .OrderBy(x => x.From).ThenBy(x => x.To); var result = new List<NormalizedHttpRangeItem>(); NormalizedHttpRangeItem currentRangeItem = null; long currentTo = 0; foreach (var rangeItem in rangeItems) { if (currentRangeItem == null) { currentRangeItem = rangeItem; currentTo = rangeItem.To; } else { var currentFrom = rangeItem.From; if (currentFrom <= (currentTo + 1)) { currentRangeItem = new NormalizedHttpRangeItem(currentRangeItem.From, rangeItem.To); } else { result.Add(currentRangeItem); currentRangeItem = rangeItem; currentTo = rangeItem.To; } } } if (currentRangeItem != null) result.Add(currentRangeItem); return result; }