67 lines
1.2 KiB
Go
67 lines
1.2 KiB
Go
package util
|
|
|
|
func BitSet(b any, bit byte, set bool) {
|
|
switch data := b.(type) {
|
|
case *byte: // uint8
|
|
if set {
|
|
*data = *data | (byte(1) << bit)
|
|
} else {
|
|
*data = *data & (^(byte(1) << bit))
|
|
}
|
|
case *int8:
|
|
if set {
|
|
*data = *data | (int8(1) << bit)
|
|
} else {
|
|
*data = *data & (^(int8(1) << bit))
|
|
}
|
|
case *uint16:
|
|
if set {
|
|
*data = *data | (uint16(1) << bit)
|
|
} else {
|
|
*data = *data & (^(uint16(1) << bit))
|
|
}
|
|
case *int16:
|
|
if set {
|
|
*data = *data | (int16(1) << bit)
|
|
} else {
|
|
*data = *data & (^(int16(1) << bit))
|
|
}
|
|
case *uint32:
|
|
if set {
|
|
*data = *data | (uint32(1) << bit)
|
|
} else {
|
|
*data = *data & (^(uint32(1) << bit))
|
|
}
|
|
case *int32:
|
|
if set {
|
|
*data = *data | (int32(1) << bit)
|
|
} else {
|
|
*data = *data & (^(int32(1) << bit))
|
|
}
|
|
case *uint64:
|
|
if set {
|
|
*data = *data | (uint64(1) << bit)
|
|
} else {
|
|
*data = *data & (^(uint64(1) << bit))
|
|
}
|
|
case *int64:
|
|
if set {
|
|
*data = *data | (int64(1) << bit)
|
|
} else {
|
|
*data = *data & (^(int64(1) << bit))
|
|
}
|
|
case *uint:
|
|
if set {
|
|
*data = *data | (uint(1) << bit)
|
|
} else {
|
|
*data = *data & (^(uint(1) << bit))
|
|
}
|
|
case *int:
|
|
if set {
|
|
*data = *data | (int(1) << bit)
|
|
} else {
|
|
*data = *data & (^(int(1) << bit))
|
|
}
|
|
}
|
|
}
|