diff options
Diffstat (limited to 'pkg')
-rw-r--r-- | pkg/btrfs/btrfsvol/chunk.go | 5 | ||||
-rw-r--r-- | pkg/util/generic.go | 22 |
2 files changed, 23 insertions, 4 deletions
diff --git a/pkg/btrfs/btrfsvol/chunk.go b/pkg/btrfs/btrfsvol/chunk.go index 146193d..8e5c4db 100644 --- a/pkg/btrfs/btrfsvol/chunk.go +++ b/pkg/btrfs/btrfsvol/chunk.go @@ -74,10 +74,7 @@ func (a chunkMapping) union(rest ...chunkMapping) (chunkMapping, error) { }] = struct{}{} } } - ret.PAddrs = make([]QualifiedPhysicalAddr, 0, len(paddrs)) - for paddr := range paddrs { - ret.PAddrs = append(ret.PAddrs, paddr) - } + ret.PAddrs = util.MapKeys(paddrs) sort.Slice(ret.PAddrs, func(i, j int) bool { return ret.PAddrs[i].Cmp(ret.PAddrs[j]) < 0 }) diff --git a/pkg/util/generic.go b/pkg/util/generic.go index 6474ea5..70fed5b 100644 --- a/pkg/util/generic.go +++ b/pkg/util/generic.go @@ -1,6 +1,8 @@ package util import ( + "sort" + "golang.org/x/exp/constraints" ) @@ -55,3 +57,23 @@ func Min[T constraints.Ordered](a, b T) T { } return b } + +func MapKeys[K comparable, V any](m map[K]V) []K { + ret := make([]K, 0, len(m)) + for k := range m { + ret = append(ret, k) + } + return ret +} + +func SortSlice[T constraints.Ordered](slice []T) { + sort.Slice(slice, func(i, j int) bool { + return slice[i] < slice[j] + }) +} + +func SortedMapKeys[K constraints.Ordered, V any](m map[K]V) []K { + ret := MapKeys(m) + SortSlice(ret) + return ret +} |