]> Sergey Matveev's repositories - btrtrc.git/blobdiff - metainfo/announcelist.go
Drop support for go 1.20
[btrtrc.git] / metainfo / announcelist.go
index 3a5c09d48349f896134b4ba7e0cb7429d3553853..f19af14ccd04a4442ccd64812d793e0c616f51d1 100644 (file)
@@ -2,6 +2,13 @@ package metainfo
 
 type AnnounceList [][]string
 
+func (al AnnounceList) Clone() (ret AnnounceList) {
+       for _, tier := range al {
+               ret = append(ret, append([]string(nil), tier...))
+       }
+       return
+}
+
 // Whether the AnnounceList should be preferred over a single URL announce.
 func (al AnnounceList) OverridesAnnounce(announce string) bool {
        for _, tier := range al {
@@ -14,13 +21,14 @@ func (al AnnounceList) OverridesAnnounce(announce string) bool {
        return false
 }
 
-func (al AnnounceList) DistinctValues() (ret map[string]struct{}) {
+func (al AnnounceList) DistinctValues() (ret []string) {
+       seen := make(map[string]struct{})
        for _, tier := range al {
                for _, v := range tier {
-                       if ret == nil {
-                               ret = make(map[string]struct{})
+                       if _, ok := seen[v]; !ok {
+                               seen[v] = struct{}{}
+                               ret = append(ret, v)
                        }
-                       ret[v] = struct{}{}
                }
        }
        return