cbindgen/tests/expectations/derive-eq.cpp
Kartikaya Gupta 5f6b223237 Add ostream header to all generated .cpp files.
Ideally we'd just do this when we need it, but the ostream derivation
will be controlled by both global config and per-structure config, so
it's hard to know exactly when we need it and when we don't.
2020-10-01 12:22:51 +02:00

101 lines
1.9 KiB
C++

#include <cstdarg>
#include <cstdint>
#include <cstdlib>
#include <ostream>
#include <new>
struct Foo {
bool a;
int32_t b;
bool operator==(const Foo& aOther) const {
return a == aOther.a &&
b == aOther.b;
}
bool operator!=(const Foo& aOther) const {
return a != aOther.a ||
b != aOther.b;
}
};
union Bar {
enum class Tag : uint8_t {
Baz,
Bazz,
FooNamed,
FooParen,
};
struct Bazz_Body {
Tag tag;
Foo named;
bool operator==(const Bazz_Body& aOther) const {
return named == aOther.named;
}
bool operator!=(const Bazz_Body& aOther) const {
return named != aOther.named;
}
};
struct FooNamed_Body {
Tag tag;
int32_t different;
uint32_t fields;
bool operator==(const FooNamed_Body& aOther) const {
return different == aOther.different &&
fields == aOther.fields;
}
bool operator!=(const FooNamed_Body& aOther) const {
return different != aOther.different ||
fields != aOther.fields;
}
};
struct FooParen_Body {
Tag tag;
int32_t _0;
Foo _1;
bool operator==(const FooParen_Body& aOther) const {
return _0 == aOther._0 &&
_1 == aOther._1;
}
bool operator!=(const FooParen_Body& aOther) const {
return _0 != aOther._0 ||
_1 != aOther._1;
}
};
struct {
Tag tag;
};
Bazz_Body bazz;
FooNamed_Body foo_named;
FooParen_Body foo_paren;
bool operator==(const Bar& aOther) const {
if (tag != aOther.tag) {
return false;
}
switch (tag) {
case Tag::Bazz: return bazz == aOther.bazz;
case Tag::FooNamed: return foo_named == aOther.foo_named;
case Tag::FooParen: return foo_paren == aOther.foo_paren;
default: break;
}
return true;
}
bool operator!=(const Bar& aOther) const {
return !(*this == aOther);
}
};
extern "C" {
Foo root(Bar aBar);
} // extern "C"