mirror of
https://github.com/tursom/GoCollections.git
synced 2025-03-15 18:27:59 +08:00
28 lines
574 B
Go
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
|
|
}
|