github.com/andy2046/gopie@v0.7.0/pkg/bitflag/bitflag.go (about) 1 // Package bitflag implements bit flag. 2 package bitflag 3 4 // Flag is an 8 bits flag. 5 type Flag byte 6 7 const siz uint8 = 7 8 9 // SetAll set all the flags. 10 func (f *Flag) SetAll(opts ...Flag) { 11 for _, o := range opts { 12 *f |= o 13 } 14 } 15 16 // ToggleAll toggle (XOR) all the flags. 17 func (f *Flag) ToggleAll(opts ...Flag) { 18 for _, o := range opts { 19 *f ^= o 20 } 21 } 22 23 // ClearAll clear all the flags. 24 func (f *Flag) ClearAll(opts ...Flag) { 25 for _, o := range opts { 26 *f &^= o 27 } 28 } 29 30 // AreAllSet check if all the flags are set. 31 func (f Flag) AreAllSet(opts ...Flag) bool { 32 for _, o := range opts { 33 if f&o == 0 { 34 return false 35 } 36 } 37 return true 38 } 39 40 // IsAnySet check if any one flag is set. 41 func (f Flag) IsAnySet(opts ...Flag) bool { 42 for _, o := range opts { 43 if f&o > 0 { 44 return true 45 } 46 } 47 return false 48 } 49 50 // IsSet check if the bit at `n` is set. 51 // `n` should be less than `8`. 52 func (f Flag) IsSet(n uint8) bool { 53 if n > siz || f&(1<<n) == 0 { 54 return false 55 } 56 return true 57 } 58 59 // Set set a single bit at `n`. 60 // `n` should be less than `8`. 61 func (f *Flag) Set(n uint8) { 62 if n > siz { 63 return 64 } 65 *f |= (1 << n) 66 } 67 68 // Toggle toggle (XOR) a single bit at `n`. 69 // `n` should be less than `8`. 70 func (f *Flag) Toggle(n uint8) { 71 if n > siz { 72 return 73 } 74 *f ^= (1 << n) 75 } 76 77 // Clear clear a single bit at `n`. 78 // `n` should be less than `8`. 79 func (f *Flag) Clear(n uint8) { 80 if n > siz { 81 return 82 } 83 *f &^= (1 << n) 84 } 85 86 // Reset reset the flag. 87 func (f *Flag) Reset() { 88 *f = 0 89 }