267 lines
3.9 KiB
C
267 lines
3.9 KiB
C
#define NOINLINE __attribute__((noinline))
|
|
#define NODISCARD [[nodiscard]]
|
|
|
|
|
|
#include <stdarg.h>
|
|
#include <stdbool.h>
|
|
#include <stdint.h>
|
|
#include <stdlib.h>
|
|
|
|
enum FillRule
|
|
#ifdef __cplusplus
|
|
: uint8_t
|
|
#endif // __cplusplus
|
|
{
|
|
A,
|
|
B,
|
|
};
|
|
#ifndef __cplusplus
|
|
typedef uint8_t FillRule;
|
|
#endif // __cplusplus
|
|
|
|
/**
|
|
* This will have a destructor manually implemented via variant_body, and
|
|
* similarly a Drop impl in Rust.
|
|
*/
|
|
typedef struct {
|
|
uintptr_t len;
|
|
uint32_t *ptr;
|
|
} OwnedSlice_u32;
|
|
|
|
typedef struct {
|
|
FillRule fill;
|
|
OwnedSlice_u32 coordinates;
|
|
} Polygon_u32;
|
|
|
|
/**
|
|
* This will have a destructor manually implemented via variant_body, and
|
|
* similarly a Drop impl in Rust.
|
|
*/
|
|
typedef struct {
|
|
uintptr_t len;
|
|
int32_t *ptr;
|
|
} OwnedSlice_i32;
|
|
|
|
enum Foo_u32_Tag
|
|
#ifdef __cplusplus
|
|
: uint8_t
|
|
#endif // __cplusplus
|
|
{
|
|
Bar_u32,
|
|
Polygon1_u32,
|
|
Slice1_u32,
|
|
Slice2_u32,
|
|
Slice3_u32,
|
|
Slice4_u32,
|
|
};
|
|
#ifndef __cplusplus
|
|
typedef uint8_t Foo_u32_Tag;
|
|
#endif // __cplusplus
|
|
|
|
typedef struct {
|
|
FillRule fill;
|
|
OwnedSlice_u32 coords;
|
|
} Slice3_Body_u32;
|
|
|
|
typedef struct {
|
|
FillRule fill;
|
|
OwnedSlice_i32 coords;
|
|
} Slice4_Body_u32;
|
|
|
|
typedef struct {
|
|
Foo_u32_Tag tag;
|
|
union {
|
|
struct {
|
|
Polygon_u32 polygon1;
|
|
};
|
|
struct {
|
|
OwnedSlice_u32 slice1;
|
|
};
|
|
struct {
|
|
OwnedSlice_i32 slice2;
|
|
};
|
|
Slice3_Body_u32 slice3;
|
|
Slice4_Body_u32 slice4;
|
|
};
|
|
} Foo_u32;
|
|
|
|
typedef struct {
|
|
FillRule fill;
|
|
OwnedSlice_i32 coordinates;
|
|
} Polygon_i32;
|
|
|
|
enum Baz_i32_Tag
|
|
#ifdef __cplusplus
|
|
: uint8_t
|
|
#endif // __cplusplus
|
|
{
|
|
Bar2_i32,
|
|
Polygon21_i32,
|
|
Slice21_i32,
|
|
Slice22_i32,
|
|
Slice23_i32,
|
|
Slice24_i32,
|
|
};
|
|
#ifndef __cplusplus
|
|
typedef uint8_t Baz_i32_Tag;
|
|
#endif // __cplusplus
|
|
|
|
typedef struct {
|
|
Baz_i32_Tag tag;
|
|
FillRule fill;
|
|
OwnedSlice_i32 coords;
|
|
} Slice23_Body_i32;
|
|
|
|
typedef struct {
|
|
Baz_i32_Tag tag;
|
|
FillRule fill;
|
|
OwnedSlice_i32 coords;
|
|
} Slice24_Body_i32;
|
|
|
|
typedef union {
|
|
Baz_i32_Tag tag;
|
|
struct {
|
|
Baz_i32_Tag polygon21_tag;
|
|
Polygon_i32 polygon21;
|
|
};
|
|
struct {
|
|
Baz_i32_Tag slice21_tag;
|
|
OwnedSlice_i32 slice21;
|
|
};
|
|
struct {
|
|
Baz_i32_Tag slice22_tag;
|
|
OwnedSlice_i32 slice22;
|
|
};
|
|
Slice23_Body_i32 slice23;
|
|
Slice24_Body_i32 slice24;
|
|
} Baz_i32;
|
|
|
|
enum Taz_Tag
|
|
#ifdef __cplusplus
|
|
: uint8_t
|
|
#endif // __cplusplus
|
|
{
|
|
Bar3,
|
|
Taz1,
|
|
Taz3,
|
|
};
|
|
#ifndef __cplusplus
|
|
typedef uint8_t Taz_Tag;
|
|
#endif // __cplusplus
|
|
|
|
typedef union {
|
|
Taz_Tag tag;
|
|
struct {
|
|
Taz_Tag taz1_tag;
|
|
int32_t taz1;
|
|
};
|
|
struct {
|
|
Taz_Tag taz3_tag;
|
|
OwnedSlice_i32 taz3;
|
|
};
|
|
} Taz;
|
|
|
|
enum Tazz_Tag
|
|
#ifdef __cplusplus
|
|
: uint8_t
|
|
#endif // __cplusplus
|
|
{
|
|
Bar4,
|
|
Taz2,
|
|
};
|
|
#ifndef __cplusplus
|
|
typedef uint8_t Tazz_Tag;
|
|
#endif // __cplusplus
|
|
|
|
typedef union {
|
|
Tazz_Tag tag;
|
|
struct {
|
|
Tazz_Tag taz2_tag;
|
|
int32_t taz2;
|
|
};
|
|
} Tazz;
|
|
|
|
enum Tazzz_Tag
|
|
#ifdef __cplusplus
|
|
: uint8_t
|
|
#endif // __cplusplus
|
|
{
|
|
Bar5,
|
|
Taz5,
|
|
};
|
|
#ifndef __cplusplus
|
|
typedef uint8_t Tazzz_Tag;
|
|
#endif // __cplusplus
|
|
|
|
typedef union {
|
|
Tazzz_Tag tag;
|
|
struct {
|
|
Tazzz_Tag taz5_tag;
|
|
int32_t taz5;
|
|
};
|
|
} Tazzz;
|
|
|
|
enum Tazzzz_Tag
|
|
#ifdef __cplusplus
|
|
: uint8_t
|
|
#endif // __cplusplus
|
|
{
|
|
Taz6,
|
|
Taz7,
|
|
};
|
|
#ifndef __cplusplus
|
|
typedef uint8_t Tazzzz_Tag;
|
|
#endif // __cplusplus
|
|
|
|
typedef union {
|
|
Tazzzz_Tag tag;
|
|
struct {
|
|
Tazzzz_Tag taz6_tag;
|
|
int32_t taz6;
|
|
};
|
|
struct {
|
|
Tazzzz_Tag taz7_tag;
|
|
uint32_t taz7;
|
|
};
|
|
} Tazzzz;
|
|
|
|
enum Qux_Tag
|
|
#ifdef __cplusplus
|
|
: uint8_t
|
|
#endif // __cplusplus
|
|
{
|
|
Qux1,
|
|
Qux2,
|
|
};
|
|
#ifndef __cplusplus
|
|
typedef uint8_t Qux_Tag;
|
|
#endif // __cplusplus
|
|
|
|
typedef union {
|
|
Qux_Tag tag;
|
|
struct {
|
|
Qux_Tag qux1_tag;
|
|
int32_t qux1;
|
|
};
|
|
struct {
|
|
Qux_Tag qux2_tag;
|
|
uint32_t qux2;
|
|
};
|
|
} Qux;
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif // __cplusplus
|
|
|
|
void root(const Foo_u32 *a,
|
|
const Baz_i32 *b,
|
|
const Taz *c,
|
|
Tazz d,
|
|
const Tazzz *e,
|
|
const Tazzzz *f,
|
|
const Qux *g);
|
|
|
|
#ifdef __cplusplus
|
|
} // extern "C"
|
|
#endif // __cplusplus
|