blob: 7fd1c6bc135b57a2faab8605080c81f60909bd3f [file] [log] [blame]
// Copyright 2019 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package codegen
const bitsTmpl = `
{{- define "BitsDefinition" -}}
{{range .DocComments}}
//{{ . }}
{{- end}}
type {{ .Name }} {{ .Type }}
const (
{{- range .Members }}
{{ $.Name }}{{ .Name }} {{ $.Name }} = {{ .Value }}
{{- end }}
{{ .Name }}_Mask {{ .Name }} = {{ .Mask }}
)
func (_ {{ .Name }}) I_BitsMask() {{ .Name }} {
return {{ .Name }}_Mask
}
func (_ {{ .Name }}) I_BitsIsStrict() bool {
return {{ .IsStrict }}
}
func (x {{ .Name }}) HasUnknownBits() bool {
return x.GetUnknownBits() != 0
}
func (x {{ .Name }}) GetUnknownBits() uint64 {
return uint64(^{{ .Name }}_Mask & x)
}
func (x {{ .Name }}) InvertBits() {{ .Name }} {
return {{ .Name }}_Mask & ^x
}
// HasBits validates that all flipped bits in the mask are set.
func (x {{ .Name }}) HasBits(mask {{ .Name }}) bool {
return mask | x == x
}
// ClearBits ensures all flipped bits in the mask are unset.
func (x {{ .Name }}) ClearBits(mask {{ .Name }}) {{ .Name }} {
return ^mask & x
}
func (x {{.Name}}) String() string {
switch x {
{{- range .Members }}
case {{ .Value }}:
return "{{.Name}}"
{{- end }}
}
return "Unknown"
}
{{- end -}}
`