2024-01-19 01:47:51 +08:00
|
|
|
package util
|
|
|
|
|
2024-01-23 13:40:10 +08:00
|
|
|
func BitSet(b any, bit byte, set bool) {
|
2024-01-23 23:02:08 +08:00
|
|
|
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))
|
|
|
|
}
|
|
|
|
}
|
2024-01-19 01:47:51 +08:00
|
|
|
}
|