go/types/mapsets: implement OrderedMap.{Count,Clear}
Change-Id: Iaee5b914fe63ee7a60f796ef986535f6f8e72960
Reviewed-on: https://review.monogon.dev/c/monogon/+/2302
Reviewed-by: Lorenz Brun <lorenz@monogon.tech>
Tested-by: Jenkins CI
diff --git a/go/types/mapsets/orderedmap.go b/go/types/mapsets/orderedmap.go
index bbcbedd..8224268 100644
--- a/go/types/mapsets/orderedmap.go
+++ b/go/types/mapsets/orderedmap.go
@@ -139,6 +139,17 @@
delete(s.values, k)
}
+// Clear removes all keys/values from the OrderedMap.
+func (s *OrderedMap[K, V]) Clear() {
+ s.keys = nil
+ s.values = nil
+}
+
+// Count returns the number of keys/values in this OrderedMap.
+func (s *OrderedMap[K, V]) Count() int {
+ return len(s.keys)
+}
+
// Clone (perform a deep copy) of the OrderedMap, copying all keys and values.
func (s *OrderedMap[K, V]) Clone() OrderedMap[K, V] {
// Short-circuit clone of empty map.
diff --git a/go/types/mapsets/orderedmap_test.go b/go/types/mapsets/orderedmap_test.go
index bb93dfd..8bb3c55 100644
--- a/go/types/mapsets/orderedmap_test.go
+++ b/go/types/mapsets/orderedmap_test.go
@@ -29,6 +29,13 @@
keysEq := func(m *OrderedMap[string, string], keystring string) {
t.Helper()
keys := strings.Split(keystring, ",")
+ // Support keystring "" indicating an empty map is expected.
+ if len(keystring) == 0 {
+ keys = nil
+ }
+ if want, got := len(keys), m.Count(); want != got {
+ t.Errorf("Wanted count %d, got %d", want, got)
+ }
if want, got := keys, m.Keys(); len(want) == len(got) {
for i, k := range want {
if got[i] != k {
@@ -74,6 +81,9 @@
}
}
}
+ // Test Clear
+ n.Clear()
+ keysEq(&n, "")
}
// TestCycleIterator exercises the CycleIterator.