blob: abd92454954d125d9d6462ef2b0724b18e19bb29 [file] [log] [blame] [edit]
{{/*
// 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 "BitsDeclaration" -}}
{{- range .Doc }}
///{{ . -}}
{{- end }}
class {{ .Name }} extends $fidl.Bits {
factory {{ .Name }}(int _v) {
{{- if .IsStrict }}
if ((_v & ~$mask.$value) != 0) {
throw $fidl.FidlError('Bits value contains unknown bit(s): $_v',
$fidl.FidlErrorCode.fidlInvalidBit);
}
{{- end }}
return {{ .Name }}._(_v);
}
{{- range .Members }}
{{- range .Doc }}
///{{ . -}}
{{- end }}
static const {{ $.Name }} {{ .Name }} = {{ $.Name }}._({{ .Value }});
{{- end }}
static const {{ .Name }} $none = {{ .Name }}._(0);
static const {{ .Name }} $mask = {{ .Name }}._({{ .Mask | printf "%#x" }});
const {{ .Name }}._(this.$value);
{{ .Name }} operator |({{ .Name }} other) {
return {{ .Name }}._($value | other.$value);
}
{{ .Name }} operator &({{ .Name }} other) {
return {{ .Name }}._($value & other.$value);
}
{{ .Name }} operator ~() {
return {{ .Name }}._(~$value & $mask.$value);
}
@override
final int $value;
@override
bool hasUnknownBits() {
return getUnknownBits() != 0;
}
@override
int getUnknownBits() {
return $value & ~$mask.$value;
}
static {{ .Name }} _ctor(int v) => {{ .Name }}(v);
}
const $fidl.BitsType<{{ .Name }}> {{ .TypeSymbol }} = {{ .TypeExpr }};
{{ end }}