23 #ifndef OSFI_FFI_BASE_H
24 #define OSFI_FFI_BASE_H
29 #if __cplusplus >= 201103L || __STDC_VERSION__ >= 202311L
30 #define OSFI_FFI_NORETURN [[noreturn]]
31 #elif __STDC_VERSION__ >= 201112L
32 #define OSFI_FFI_NORETURN _Noreturn
34 #define OSFI_FFI_NORETURN
37 #if __cplusplus >= 201402L || __STDC_VERSION__ >= 202311L
38 #define OSFI_FFI_DEPRECATED(reason) [[deprecated(reason)]]
40 #define OSFI_FFI_DEPRECATED(reason)
48 #define CONCAT_(A,B) A##B
49 #define CONCAT(A,B) CONCAT_(A,B)
52 #define OSFI_FFI_DECL_PLACEHOLDER(name) typedef struct CONCAT(name,_t) name
55 #undef OSFI_FFI_DECL_PLACEHOLDER
56 #define OSFI_FFI_DECL_PLACEHOLDER(name)
62 #define OSFI_VEC_T(Tname) OSFI_Vec_T##Tname
63 #ifndef OSFI_DECL_VEC_T
65 #define OSFI_DECL_VEC_T(Tname, Ttype) \
67 OSFI_FFI_DECL_PLACEHOLDER(OSFI_VEC_T(Tname))
71 #define OSFI_DECL_VEC_GETTER_simple(Tname, Ttype) \
73 Ttype osfi_confm_vector_##Tname##_get(const OSFI_VEC_T(Tname) *v, int index); \
77 int osfi_confm_vector_##Tname##_copyall(const OSFI_VEC_T(Tname) *v, Ttype* arr, int length);
79 #define OSFI_DECL_VEC_GETTER_str(Tname, Ttype) \
82 int osfi_confm_vector_##Tname##_get(const OSFI_VEC_T(Tname) *v, int index, Ttype buf, int bufSz); \
87 bool osfi_confm_vector_##Tname##_copyall(const OSFI_VEC_T(Tname) *v, Ttype* strArr, int* itemSz, int* numItems);
90 #define OSFI_DECL_VEC_OPER(Tname, Ttype, kind) \
92 int osfi_confm_vector_##Tname##_numel(const OSFI_VEC_T(Tname) *v); \
94 void osfi_confm_vector_##Tname##_destroy(OSFI_VEC_T(Tname) ** obj); \
95 OSFI_DECL_VEC_GETTER_ ## kind(Tname, Ttype);
102 #define OSFI_DECL_VECTOR(Tname, Ttype, kind) \
103 OSFI_DECL_VEC_T(Tname, Ttype); \
104 OSFI_DECL_VEC_OPER(Tname, Ttype, kind)
#define OSFI_FFI_DECL_PLACEHOLDER(name)
Definition: ffi_base.h:52
struct OSFI_TimeValue_t OSFI_TimeValue
Definition: ffi_base.h:102