2018-09-20 13:31:20 +03:00
|
|
|
// +build dev
|
2018-04-29 14:58:36 +03:00
|
|
|
|
|
|
|
package hodl
|
|
|
|
|
|
|
|
import (
|
|
|
|
"fmt"
|
|
|
|
"strings"
|
|
|
|
)
|
|
|
|
|
|
|
|
// MaskFromFlags merges a variadic set of Flags into a single Mask.
|
|
|
|
func MaskFromFlags(flags ...Flag) Mask {
|
|
|
|
var mask Mask
|
|
|
|
for _, flag := range flags {
|
|
|
|
mask |= Mask(flag)
|
|
|
|
}
|
|
|
|
|
|
|
|
return mask
|
|
|
|
}
|
|
|
|
|
|
|
|
// Active returns true if the bit corresponding to the flag is set within the
|
|
|
|
// mask.
|
|
|
|
func (m Mask) Active(flag Flag) bool {
|
|
|
|
return (Flag(m) & flag) > 0
|
|
|
|
}
|
|
|
|
|
|
|
|
// String returns a human-readable description of all active Flags.
|
|
|
|
func (m Mask) String() string {
|
|
|
|
if m == MaskNone {
|
|
|
|
return "hodl.Mask(NONE)"
|
|
|
|
}
|
|
|
|
|
|
|
|
var activeFlags []string
|
|
|
|
for i := uint(0); i < 32; i++ {
|
|
|
|
flag := Flag(1 << i)
|
|
|
|
if m.Active(flag) {
|
|
|
|
activeFlags = append(activeFlags, flag.String())
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return fmt.Sprintf("hodl.Mask(%s)", strings.Join(activeFlags, "|"))
|
|
|
|
}
|