Files
nomad/plugins/shared/structs/units.go
Alex Dadgar cb773f3dc1 fmt -s
2018-10-12 15:34:21 -07:00

214 lines
3.8 KiB
Go

package structs
import "sort"
var (
// numUnits is the number of known units
numUnits = len(binarySIBytes) + len(decimalSIBytes) + len(binarySIByteRates) + len(decimalSIByteRates) + len(watts) + len(hertz)
// UnitIndex is a map of unit name to unit
UnitIndex = make(map[string]*Unit, numUnits)
// lengthSortedUnits is a list of unit names sorted by length with longest
// first
lengthSortedUnits = make([]string, 0, numUnits)
binarySIBytes = []*Unit{
{
Name: "KiB",
Base: UnitByte,
Multiplier: 1 << 10,
},
{
Name: "MiB",
Base: UnitByte,
Multiplier: 1 << 20,
},
{
Name: "GiB",
Base: UnitByte,
Multiplier: 1 << 30,
},
{
Name: "TiB",
Base: UnitByte,
Multiplier: 1 << 40,
},
{
Name: "PiB",
Base: UnitByte,
Multiplier: 1 << 50,
},
{
Name: "EiB",
Base: UnitByte,
Multiplier: 1 << 60,
},
}
decimalSIBytes = []*Unit{
{
Name: "kB",
Base: UnitByte,
Multiplier: Pow(1000, 1),
},
{
Name: "KB", // Alternative name for kB
Base: UnitByte,
Multiplier: Pow(1000, 1),
},
{
Name: "MB",
Base: UnitByte,
Multiplier: Pow(1000, 2),
},
{
Name: "GB",
Base: UnitByte,
Multiplier: Pow(1000, 3),
},
{
Name: "TB",
Base: UnitByte,
Multiplier: Pow(1000, 4),
},
{
Name: "PB",
Base: UnitByte,
Multiplier: Pow(1000, 5),
},
{
Name: "EB",
Base: UnitByte,
Multiplier: Pow(1000, 6),
},
}
binarySIByteRates = []*Unit{
{
Name: "KiB/s",
Base: UnitByteRate,
Multiplier: 1 << 10,
},
{
Name: "MiB/s",
Base: UnitByteRate,
Multiplier: 1 << 20,
},
{
Name: "GiB/s",
Base: UnitByteRate,
Multiplier: 1 << 30,
},
{
Name: "TiB/s",
Base: UnitByteRate,
Multiplier: 1 << 40,
},
{
Name: "PiB/s",
Base: UnitByteRate,
Multiplier: 1 << 50,
},
{
Name: "EiB/s",
Base: UnitByteRate,
Multiplier: 1 << 60,
},
}
decimalSIByteRates = []*Unit{
{
Name: "kB/s",
Base: UnitByteRate,
Multiplier: Pow(1000, 1),
},
{
Name: "KB/s", // Alternative name for kB/s
Base: UnitByteRate,
Multiplier: Pow(1000, 1),
},
{
Name: "MB/s",
Base: UnitByteRate,
Multiplier: Pow(1000, 2),
},
{
Name: "GB/s",
Base: UnitByteRate,
Multiplier: Pow(1000, 3),
},
{
Name: "TB/s",
Base: UnitByteRate,
Multiplier: Pow(1000, 4),
},
{
Name: "PB/s",
Base: UnitByteRate,
Multiplier: Pow(1000, 5),
},
{
Name: "EB/s",
Base: UnitByteRate,
Multiplier: Pow(1000, 6),
},
}
hertz = []*Unit{
{
Name: "MHz",
Base: UnitHertz,
Multiplier: Pow(1000, 1),
},
{
Name: "GHz",
Base: UnitHertz,
Multiplier: Pow(1000, 3),
},
}
watts = []*Unit{
{
Name: "mW",
Base: UnitWatt,
Multiplier: Pow(10, 3),
InverseMultiplier: true,
},
{
Name: "W",
Base: UnitWatt,
Multiplier: 1,
},
{
Name: "kW",
Base: UnitWatt,
Multiplier: Pow(10, 3),
},
{
Name: "MW",
Base: UnitWatt,
Multiplier: Pow(10, 6),
},
{
Name: "GW",
Base: UnitWatt,
Multiplier: Pow(10, 9),
},
}
)
func init() {
// Build the index
for _, units := range [][]*Unit{binarySIBytes, decimalSIBytes, binarySIByteRates, decimalSIByteRates, watts, hertz} {
for _, unit := range units {
UnitIndex[unit.Name] = unit
lengthSortedUnits = append(lengthSortedUnits, unit.Name)
}
}
sort.Slice(lengthSortedUnits, func(i, j int) bool {
return len(lengthSortedUnits[i]) >= len(lengthSortedUnits[j])
})
}