blob: 3caad2a48b365f3dd9f1a96bf5b24b6e98d13396 [file] [log] [blame]
// Copyright 2020 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package utils
import (
"sort"
"go.fuchsia.dev/fuchsia/tools/fidl/measure-tape/src/measurer"
)
// ForAllMethodsInOrder iterates over allMethods in the order of MethodID.
func ForAllMethodsInOrder(
allMethods map[measurer.MethodID]*measurer.Method,
fn func(m *measurer.Method)) {
methodsToPrint := make([]measurer.MethodID, 0, len(allMethods))
for id := range allMethods {
methodsToPrint = append(methodsToPrint, id)
}
sort.Sort(measurer.ByTargetTypeThenKind(methodsToPrint))
for _, id := range methodsToPrint {
fn(allMethods[id])
}
}
// ForAllVariantsInOrder iterates over variants in member order. If present,
// the unknown variant is always last.
func ForAllVariantsInOrder(
variants map[string]measurer.LocalWithBlock,
fn func(member string, localWithBlock measurer.LocalWithBlock)) {
var members []string
for member := range variants {
members = append(members, member)
}
sort.Strings(members)
for _, member := range members {
if member != measurer.UnknownVariant {
fn(member, variants[member])
}
}
if _, ok := variants[measurer.UnknownVariant]; ok {
fn(measurer.UnknownVariant, variants[measurer.UnknownVariant])
}
}