GoCollections/lang/Number.go
2022-12-03 19:13:29 +08:00

28 lines
574 B
Go

/*
* Copyright (c) 2022 tursom. All rights reserved.
* Use of this source code is governed by a GPL-3
* license that can be found in the LICENSE file.
*/
package lang
// Number interface for real number
type Number interface {
ToInt64() Int64
ToUInt64() UInt64
ToFloat64() Float64
}
func SwapBit[T int32 | int64 | uint32 | uint64](p *T, bit int, new bool) (old bool) {
location := T(1) << bit
oldValue := *p
var newValue T
if new {
newValue = oldValue | location
} else {
newValue = oldValue & ^location
}
*p = newValue
return oldValue&newValue != 0
}