#include // See comments in build_native_lib() #define EXPORT __attribute__((visibility("default"))) /* Test: fail/pass_struct_expose_only_range */ typedef struct HasPointer { uint8_t *ptr; } HasPointer; EXPORT uint8_t access_struct_ptr(const HasPointer s) { return *s.ptr; } /* Test: test_pass_struct */ typedef struct PassMe { int32_t value; int64_t other_value; } PassMe; EXPORT int64_t pass_struct(const PassMe pass_me) { return pass_me.value + pass_me.other_value; } /* Test: test_pass_struct_complex */ typedef struct Part1 { uint16_t high; uint16_t low; } Part1; typedef struct Part2 { uint32_t bits; } Part2; typedef struct ComplexStruct { Part1 part_1; Part2 part_2; uint32_t part_3; } ComplexStruct; EXPORT int32_t pass_struct_complex(const ComplexStruct complex, uint16_t high, uint16_t low, uint32_t bits) { if (complex.part_1.high == high && complex.part_1.low == low && complex.part_2.bits == bits && complex.part_3 == bits) return 0; else { return 1; } }