util/bit.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))
}
}
}