github.com/anacrolix/torrent@v1.61.0/metainfo/announcelist.go (about)

     1  package metainfo
     2  
     3  import (
     4  	"slices"
     5  )
     6  
     7  type AnnounceList [][]string
     8  
     9  func (al AnnounceList) Clone() AnnounceList {
    10  	return slices.Clone(al)
    11  }
    12  
    13  // Whether the AnnounceList should be preferred over a single URL announce.
    14  func (al AnnounceList) OverridesAnnounce(announce string) bool {
    15  	for _, tier := range al {
    16  		for _, url := range tier {
    17  			if url != "" || announce == "" {
    18  				return true
    19  			}
    20  		}
    21  	}
    22  	return false
    23  }
    24  
    25  func (al AnnounceList) DistinctValues() (ret []string) {
    26  	seen := make(map[string]struct{})
    27  	for _, tier := range al {
    28  		for _, v := range tier {
    29  			if _, ok := seen[v]; !ok {
    30  				seen[v] = struct{}{}
    31  				ret = append(ret, v)
    32  			}
    33  		}
    34  	}
    35  	return
    36  }