MergeTokens takes in input multiple lists of tokens and returns a single list containing all tokens merged and sorted. Each input single list is required to have tokens already sorted.
(instances [][]uint32)
| 728 | // containing all tokens merged and sorted. Each input single list is required |
| 729 | // to have tokens already sorted. |
| 730 | func MergeTokens(instances [][]uint32) []uint32 { |
| 731 | numTokens := 0 |
| 732 | |
| 733 | for _, tokens := range instances { |
| 734 | numTokens += len(tokens) |
| 735 | } |
| 736 | |
| 737 | tree := loser.New(instances, math.MaxUint32) |
| 738 | out := make([]uint32, 0, numTokens) |
| 739 | |
| 740 | for tree.Next() { |
| 741 | out = append(out, tree.Winner()) |
| 742 | } |
| 743 | |
| 744 | return out |
| 745 | } |
| 746 | |
| 747 | // MergeTokensByZone is like MergeTokens but does it for each input zone. |
| 748 | func MergeTokensByZone(zones map[string][][]uint32) map[string][]uint32 { |