aboutsummaryrefslogtreecommitdiffhomepage
path: root/system/enablement.go
diff options
context:
space:
mode:
Diffstat (limited to 'system/enablement.go')
-rw-r--r--system/enablement.go77
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(), ", ")
}