#include "helpers/basic_inner_types.idl"

struct short_optional
{
    @optional short value;
};

struct ushort_optional
{
    @optional unsigned short value;
};

struct long_optional
{
    @optional long value;
};

struct ulong_optional
{
    @optional unsigned long value;
};

struct longlong_optional
{
    @optional long long value;
};

struct ulonglong_optional
{
    @optional unsigned long long value;
};

struct float_optional
{
    @optional float value;
};

struct double_optional
{
    @optional double value;
};

struct longdouble_optional
{
    @optional long double value;
};

struct boolean_optional
{
    @optional boolean value;
};

struct octet_optional
{
    @optional octet value;
};

struct char_optional
{
    @optional char value;
};

struct wchar_optional
{
    @optional wchar value;
};

struct short_align_1_optional
{
    octet align;
    @optional short value;
};

struct short_align_2_optional
{
    unsigned short align;
    @optional short value;
};

struct short_align_4_optional
{
    unsigned long align;
    @optional short value;
};

struct ushort_align_1_optional
{
    octet align;
    @optional unsigned short value;
};

struct ushort_align_2_optional
{
    unsigned short align;
    @optional unsigned short value;
};

struct ushort_align_4_optional
{
    unsigned long align;
    @optional unsigned short value;
};

struct long_align_1_optional
{
    octet align;
    @optional long value;
};

struct long_align_2_optional
{
    unsigned short align;
    @optional long value;
};

struct long_align_4_optional
{
    unsigned long align;
    @optional long value;
};

struct ulong_align_1_optional
{
    octet align;
    @optional unsigned long value;
};

struct ulong_align_2_optional
{
    unsigned short align;
    @optional unsigned long value;
};

struct ulong_align_4_optional
{
    unsigned long align;
    @optional unsigned long value;
};

struct longlong_align_1_optional
{
    octet align;
    @optional long long value;
};

struct longlong_align_2_optional
{
    unsigned short align;
    @optional long long value;
};

struct longlong_align_4_optional
{
    unsigned long align;
    @optional long long value;
};

struct ulonglong_align_1_optional
{
    octet align;
    @optional unsigned long long value;
};

struct ulonglong_align_2_optional
{
    unsigned short align;
    @optional unsigned long long value;
};

struct ulonglong_align_4_optional
{
    unsigned long align;
    @optional unsigned long long value;
};

struct float_align_1_optional
{
    octet align;
    @optional float value;
};

struct float_align_2_optional
{
    unsigned short align;
    @optional float value;
};

struct float_align_4_optional
{
    unsigned long align;
    @optional float value;
};

struct double_align_1_optional
{
    octet align;
    @optional double value;
};

struct double_align_2_optional
{
    unsigned short align;
    @optional double value;
};

struct double_align_4_optional
{
    unsigned long align;
    @optional double value;
};

struct longdouble_align_1_optional
{
    octet align;
    @optional long double value;
};

struct longdouble_align_2_optional
{
    unsigned short align;
    @optional long double value;
};

struct longdouble_align_4_optional
{
    unsigned long align;
    @optional long double value;
};

struct boolean_align_1_optional
{
    octet align;
    @optional boolean value;
};

struct boolean_align_2_optional
{
    unsigned short align;
    @optional boolean value;
};
struct boolean_align_4_optional
{
    unsigned long align;
    @optional boolean value;
};

struct octet_align_1_optional
{
    octet align;
    @optional octet value;
};

struct octet_align_2_optional
{
    unsigned short align;
    @optional octet value;
};

struct octet_align_4_optional
{
    unsigned long align;
    @optional octet value;
};

struct char_align_1_optional
{
    octet align;
    @optional char value;
};

struct char_align_2_optional
{
    unsigned short align;
    @optional char value;
};

struct char_align_4_optional
{
    unsigned long align;
    @optional char value;
};

struct wchar_align_1_optional
{
    octet align;
    @optional wchar value;
};

struct wchar_align_2_optional
{
    unsigned short align;
    @optional wchar value;
};

struct wchar_align_4_optional
{
    unsigned long align;
    @optional wchar value;
};

struct sequence_short_optional
{
    @optional sequence<short> value;
};

struct sequence_short_align_1_optional
{
    octet align;
    @optional sequence<short> value;
};

struct sequence_short_align_2_optional
{
    unsigned short align;
    @optional sequence<short> value;
};

struct sequence_short_align_4_optional
{
    unsigned long align;
    @optional sequence<short> value;
};

struct string_unbounded_optional
{
    @optional string value;
};

struct string_unbounded_align_1_optional
{
    octet align;
    @optional string value;
};

struct string_unbounded_align_2_optional
{
    unsigned short align;
    @optional string value;
};

struct string_unbounded_align_4_optional
{
    unsigned long align;
    @optional string value;
};

struct string_bounded_optional
{
    @optional string<8> value;
};

struct string_bounded_align_1_optional
{
    octet align;
    @optional string<8> value;
};

struct string_bounded_align_2_optional
{
    unsigned short align;
    @optional string<8> value;
};

struct string_bounded_align_4_optional
{
    unsigned long align;
    @optional string<8> value;
};

struct map_short_optional
{
    @optional map<long, short> value;
};

struct map_short_align_1_optional
{
    octet align;
    @optional map<long, short> value;
};

struct map_short_align_2_optional
{
    unsigned short align;
    @optional map<long, short> value;
};

struct map_short_align_4_optional
{
    unsigned long align;
    @optional map<long, short> value;
};

struct array_short_optional
{
    @optional short value[10];
};

struct array_short_align_1_optional
{
    octet align;
    @optional short value[10];
};

struct array_short_align_2_optional
{
    unsigned short align;
    @optional short value[10];
};

struct array_short_align_4_optional
{
    unsigned long align;
    @optional short value[10];
};

struct struct_optional
{
    @optional InnerStructureHelper value;
};

struct struct_align_1_optional
{
    octet align;
    @optional InnerStructureHelper value;
};

struct struct_align_2_optional
{
    unsigned short align;
    @optional InnerStructureHelper value;
};

struct struct_align_4_optional
{
    unsigned long align;
    @optional InnerStructureHelper value;
};

struct InnerStructOptional
{
    short s;
    @optional long l;
};

struct opt_struct_optional
{
    @optional InnerStructOptional value;
};

struct opt_struct_align_1_optional
{
    octet align;
    @optional InnerStructOptional value;
};

struct opt_struct_align_2_optional
{
    unsigned short align;
    @optional InnerStructOptional value;
};

struct opt_struct_align_4_optional
{
    unsigned long align;
    @optional InnerStructOptional value;
};
