blob: 245c9b0260d463deb48612589b12a97777e47679 [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 tmplEnum = `
{{- define "EnumSizeAndAlloc" }}
template<>
struct MinSize<{{ .Natural.Name }}> {
operator size_t() { return sizeof(uint64_t); }
};
template<>
struct Allocate<{{ .Natural.Name }}> {
{{ .Natural.Name }} operator()(FuzzInput* src, size_t* size) {
{{ .Natural.Name }} out;
uint64_t selector;
ZX_ASSERT(*size >= sizeof(uint64_t));
ZX_ASSERT(src->CopyObject(&selector));
*size = sizeof(uint64_t);
switch (selector % {{ len .Members }}) {
{{- $enumName := .Natural.Name }}
{{- range $memberIdx, $member := .Members }}
case {{ $memberIdx }}:
out = {{ $enumName }}::{{ $member.Name }};
break;
{{- end }}
}
return out;
}
};
{{- end }}
`