blob: 6f560cfb94249f2e95d2799073e56813e61d4711 [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.
*/}}
{{- 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 {
var buf _strings.Builder
{{- range .Members }}
if {{ .Value }} & x != 0 {
if buf.Len() != 0 {
buf.WriteRune('|')
}
buf.WriteString("{{.Name}}")
}
{{- end }}
if buf.Len() == 0 {
buf.WriteString("<empty bits>")
}
return buf.String()
}
{{- end -}}