diff options
Diffstat (limited to 'system/enablement.go')
| -rw-r--r-- | system/enablement.go | 77 |
1 files changed, 28 insertions, 49 deletions
diff --git a/system/enablement.go b/system/enablement.go index f0911d54..f3e74e0f 100644 --- a/system/enablement.go +++ b/system/enablement.go @@ -1,68 +1,47 @@ package system import ( + "fmt" "strings" ) -type ( - // Enablement represents an optional system resource - Enablement uint8 - // Enablements represents optional system resources to share - Enablements uint64 -) +// Enablement represents optional system resources. +type Enablement byte const ( - EWayland Enablement = iota + EWayland Enablement = 1 << iota EX11 EDBus EPulse -) -var enablementString = [...]string{ - EWayland: "Wayland", - EX11: "X11", - EDBus: "D-Bus", - EPulse: "PulseAudio", -} - -const ELen = len(enablementString) + EM +) func (e Enablement) String() string { - if int(e) >= ELen { - return "<invalid enablement>" - } - return enablementString[e] -} - -func (e Enablement) Mask() Enablements { - return 1 << e -} + switch e { + case 0: + return "(no enablements)" + case EWayland: + return "wayland" + case EX11: + return "x11" + case EDBus: + return "dbus" + case EPulse: + return "pulseaudio" + default: + buf := new(strings.Builder) + buf.Grow(32) -// Has returns whether a feature is enabled -func (es *Enablements) Has(e Enablement) bool { - return *es&e.Mask() != 0 -} - -// Set enables a feature -func (es *Enablements) Set(e Enablement) { - if es.Has(e) { - panic("enablement " + e.String() + " set twice") - } - - *es |= e.Mask() -} - -func (es *Enablements) String() string { - buf := new(strings.Builder) - for i := Enablement(0); i < Enablement(ELen); i++ { - if es.Has(i) { - buf.WriteString(", " + i.String()) + for i := Enablement(1); i < EM; i <<= 1 { + if e&i != 0 { + buf.WriteString(", " + i.String()) + } } - } - if buf.Len() == 0 { - buf.WriteString("(No enablements)") + if buf.Len() == 0 { + return fmt.Sprintf("e%x", byte(e)) + } + return strings.TrimPrefix(buf.String(), ", ") } - - return strings.TrimPrefix(buf.String(), ", ") } |
