23 #ifndef OSFI_FFI_BASE_H
24 #define OSFI_FFI_BASE_H
31 #if __cplusplus >= 201103L
32 #define OSFI_FFI_NORETURN [[noreturn]]
34 #if __cplusplus >= 201402L
35 #define OSFI_FFI_DEPRECATED(reason) [[deprecated(reason)]]
39 #if __STDC_VERSION__ >= 201112L
40 #define OSFI_FFI_NORETURN _Noreturn
45 #ifndef OSFI_FFI_NORETURN
46 #define OSFI_FFI_NORETURN
49 #ifndef OSFI_FFI_DEPRECATED
50 #define OSFI_FFI_DEPRECATED(reason)
54 #define CONCAT_(A,B) A##B
55 #define CONCAT(A,B) CONCAT_(A,B)
58 #define OSFI_FFI_DECL_PLACEHOLDER(name) typedef struct CONCAT(name,_t) name
61 #undef OSFI_FFI_DECL_PLACEHOLDER
62 #define OSFI_FFI_DECL_PLACEHOLDER(name)
68 #define OSFI_VEC_T(Tname) OSFI_Vec_T##Tname
69 #ifndef OSFI_DECL_VEC_T
71 #define OSFI_DECL_VEC_T(Tname, Ttype) \
73 OSFI_FFI_DECL_PLACEHOLDER(OSFI_VEC_T(Tname))
77 #define OSFI_DECL_VEC_GETTER_simple(Tname, Ttype) \
79 Ttype osfi_confm_vector_##Tname##_get(const OSFI_VEC_T(Tname) *v, int index); \
83 int osfi_confm_vector_##Tname##_copyall(const OSFI_VEC_T(Tname) *v, Ttype* arr, int length);
85 #define OSFI_DECL_VEC_GETTER_str(Tname, Ttype) \
88 int osfi_confm_vector_##Tname##_get(const OSFI_VEC_T(Tname) *v, int index, Ttype buf, int bufSz); \
93 bool osfi_confm_vector_##Tname##_copyall(const OSFI_VEC_T(Tname) *v, Ttype* strArr, int* itemSz, int* numItems);
96 #define OSFI_DECL_VEC_OPER(Tname, Ttype, kind) \
98 int osfi_confm_vector_##Tname##_numel(const OSFI_VEC_T(Tname) *v); \
100 void osfi_confm_vector_##Tname##_destroy(OSFI_VEC_T(Tname) ** obj); \
101 OSFI_DECL_VEC_GETTER_ ## kind(Tname, Ttype);
108 #define OSFI_DECL_VECTOR(Tname, Ttype, kind) \
109 OSFI_DECL_VEC_T(Tname, Ttype); \
110 OSFI_DECL_VEC_OPER(Tname, Ttype, kind)
#define OSFI_FFI_DECL_PLACEHOLDER(name)
Definition: ffi_base.h:58
struct OSFI_TimeValue_t OSFI_TimeValue
Definition: ffi_base.h:108