chore: reduce data copying in quic sniffer and better handle data fragmentation and overlap

This commit is contained in:
wwqgtxx
2025-03-14 12:07:23 +08:00
parent a7a796bb30
commit 1e22f4daa9
3 changed files with 162 additions and 59 deletions

View File

@@ -3,6 +3,7 @@ package utils
import (
"errors"
"fmt"
"sort"
"strconv"
"strings"
@@ -149,3 +150,24 @@ func (ranges IntRanges[T]) Range(f func(t T) bool) {
}
}
}
func (ranges IntRanges[T]) Merge() (mergedRanges IntRanges[T]) {
if len(ranges) == 0 {
return
}
sort.Slice(ranges, func(i, j int) bool {
return ranges[i].Start() < ranges[j].Start()
})
mergedRanges = ranges[:1]
var rangeIndex int
for _, r := range ranges[1:] {
if mergedRanges[rangeIndex].End()+1 > mergedRanges[rangeIndex].End() && // integer overflow
r.Start() > mergedRanges[rangeIndex].End()+1 {
mergedRanges = append(mergedRanges, r)
rangeIndex++
} else if r.End() > mergedRanges[rangeIndex].End() {
mergedRanges[rangeIndex].end = r.End()
}
}
return
}