summaryrefslogtreecommitdiff
path: root/pkg
diff options
context:
space:
mode:
Diffstat (limited to 'pkg')
-rw-r--r--pkg/btrfs/btrfsvol/chunk.go5
-rw-r--r--pkg/util/generic.go22
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
+}