blob: a25adb752b7a54d60d6556d74a9101162ea12948 [file] [log] [blame] [edit]
package nvme
import (
"math"
"math/big"
)
// uint128 little endian composed of two uint64s, readable by binary.Read.
// Auxiliary type to simplify structures with uint128s (of which NVMe has
// quite a few).
type uint128le struct {
Lo, Hi uint64
}
// BigInt returns u as a bigint
func (u uint128le) BigInt() *big.Int {
v := new(big.Int).SetUint64(u.Hi)
v = v.Lsh(v, 64)
v = v.Or(v, new(big.Int).SetUint64(u.Lo))
return v
}
// Uint64 returns u as a clamped uint64
func (u uint128le) Uint64() uint64 {
if u.Hi > 0 {
return math.MaxUint64
}
return u.Lo
}