| 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 | 
 | } |