util/bit.go

67 lines
1.2 KiB
Go
Raw Normal View History

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
}