blob: 0d4fe9130d84904e6b2572db1b5a7ab09c6b703a [file] [log] [blame]
// WARNING: This file is machine generated by fidlgen.
#pragma once
#include <exampleusing/cpp/libfuzzer.h>
#include <fidl/test/placementofattributes/cpp/fidl.h>
#include "lib/fidl/cpp/fuzzing/traits.h"
#include "lib/fidl/cpp/internal/header.h"
// For ::std::max_element().
#include <algorithm>
// For uint64_t.
#include <stdint.h>
namespace fuzzing {
using ExampleXUnion = ::fidl::test::placementofattributes::ExampleXUnion;
using ExampleUnion = ::fidl::test::placementofattributes::ExampleUnion;
using ExampleTable = ::fidl::test::placementofattributes::ExampleTable;
using ExampleStruct = ::fidl::test::placementofattributes::ExampleStruct;
using ExampleEnum = ::fidl::test::placementofattributes::ExampleEnum;
using ExampleBits = ::fidl::test::placementofattributes::ExampleBits;
template <>
struct MinSize<ExampleXUnion> {
operator size_t() {
size_t sizes[] = {0, MinSize<uint32_t>()};
return 1 + *std::max_element(sizes, sizes + 1 + 1);
}
};
template <>
struct Allocate<ExampleXUnion> {
static_assert(1 > 0, "xunion must have at least one member");
ExampleXUnion operator()(FuzzInput* src, size_t* size) {
ZX_ASSERT(*size >= MinSize<ExampleXUnion>());
uint8_t selector;
ZX_ASSERT(src->CopyBytes(&selector, 1));
(*size)++;
ExampleXUnion out;
switch (selector % 1) {
case 0: {
out.set_variant(Allocate<uint32_t>{}(src, size));
break;
}
}
return out;
}
};
template <>
struct MinSize<ExampleUnion> {
operator size_t() {
size_t sizes[] = {0, MinSize<uint32_t>()};
return 1 + *std::max_element(sizes, sizes + 1 + 1);
}
};
template <>
struct Allocate<ExampleUnion> {
static_assert(1 > 0, "xunion must have at least one member");
ExampleUnion operator()(FuzzInput* src, size_t* size) {
ZX_ASSERT(*size >= MinSize<ExampleUnion>());
uint8_t selector;
ZX_ASSERT(src->CopyBytes(&selector, 1));
(*size)++;
ExampleUnion out;
switch (selector % 1) {
case 0: {
out.set_variant(Allocate<uint32_t>{}(src, size));
break;
}
}
return out;
}
};
template <>
struct MinSize<ExampleTable> {
operator size_t() { return MinSize<uint32_t>(); }
};
template <>
struct Allocate<ExampleTable> {
ExampleTable operator()(FuzzInput* src, size_t* size) {
ZX_ASSERT(*size >= MinSize<ExampleTable>());
ExampleTable out;
const size_t slack_per_member = (*size - MinSize<ExampleTable>()) / 1;
size_t out_size;
out_size = MinSize<uint32_t>() + slack_per_member;
out.set_member(Allocate<uint32_t>{}(src, &out_size));
return out;
}
};
template <>
struct MinSize<ExampleStruct> {
operator size_t() { return MinSize<uint32_t>(); }
};
template <>
struct Allocate<ExampleStruct> {
ExampleStruct operator()(FuzzInput* src, size_t* size) {
ZX_ASSERT(*size >= MinSize<ExampleStruct>());
ExampleStruct out;
const size_t slack_per_member = (*size - MinSize<ExampleStruct>()) / 1;
size_t out_size;
out_size = MinSize<uint32_t>() + slack_per_member;
out.member = Allocate<uint32_t>{}(src, &out_size);
return out;
}
};
template <>
struct MinSize<ExampleEnum> {
operator size_t() { return sizeof(uint64_t); }
};
template <>
struct Allocate<ExampleEnum> {
ExampleEnum operator()(FuzzInput* src, size_t* size) {
ExampleEnum out;
uint64_t selector;
ZX_ASSERT(*size >= sizeof(uint64_t));
ZX_ASSERT(src->CopyObject(&selector));
*size = sizeof(uint64_t);
switch (selector % 1) {
case 0:
out = ExampleEnum::MEMBER;
break;
}
return out;
}
};
template <>
struct MinSize<ExampleBits> {
operator size_t() { return sizeof(ExampleBits); }
};
template <>
struct Allocate<ExampleBits> {
ExampleBits operator()(FuzzInput* src, size_t* size) {
ExampleBits out;
ZX_ASSERT(*size >= sizeof(ExampleBits));
ZX_ASSERT(src->CopyObject(&out));
*size = sizeof(ExampleBits);
return out;
}
};
} // namespace fuzzing