83#define UCX_VERSION_MAJOR 3
86#define UCX_VERSION_MINOR 1
89#define UCX_VERSION (((UCX_VERSION_MAJOR)<<16)|UCX_VERSION_MINOR)
106#error Missing INTPTR_MAX definition
108#if INTPTR_MAX == INT64_MAX
112#define CX_WORDSIZE 64
113#elif INTPTR_MAX == INT32_MAX
117#define CX_WORDSIZE 32
119#error Unknown pointer size or missing size macros!
130#define __attribute__(x)
136#define cx_attr_fallthrough __attribute__((__fallthrough__))
141#define cx_attr_nonnull __attribute__((__nonnull__))
146#define cx_attr_nonnull_arg(...) __attribute__((__nonnull__(__VA_ARGS__)))
151#define cx_attr_returns_nonnull __attribute__((__returns_nonnull__))
156#define cx_attr_malloc __attribute__((__malloc__))
158#if !defined(__clang__) && __GNUC__ >= 11
166#define cx_attr_dealloc(freefunc, freefunc_arg) \
167 __attribute__((__malloc__(freefunc, freefunc_arg)))
172#define cx_attr_dealloc(...)
178#define cx_attr_dealloc_ucx cx_attr_dealloc(cxFree, 2)
183#define cx_attr_allocsize(...) __attribute__((__alloc_size__(__VA_ARGS__)))
190#define cx_attr_cstr_arg(idx)
194#define cx_attr_access(mode, ...)
200#define cx_attr_access(mode, ...)
205#define cx_attr_access(mode, ...) __attribute__((__access__(mode, __VA_ARGS__)))
211#define cx_attr_cstr_arg(idx)
218#define cx_attr_cstr_arg(idx) \
219 __attribute__((__null_terminated_string_arg__(idx)))
230#define cx_attr_access_r(...) cx_attr_access(__read_only__, __VA_ARGS__)
238#define cx_attr_access_rw(...) cx_attr_access(__read_write__, __VA_ARGS__)
246#define cx_attr_access_w(...) cx_attr_access(__write_only__, __VA_ARGS__)
251#define cx_attr_unused __attribute__((__unused__))
256#define cx_attr_nodiscard __attribute__((__warn_unused_result__))
265#define _Thread_local __declspec(thread)
272#if defined(CX_WINDLL_EXPORT)
273#define CX_EXPORT __declspec(dllexport)
274#elif defined(CX_WINDLL)
275#define CX_EXPORT __declspec(dllimport)
285#define CX_INLINE __attribute__((always_inline)) static inline
290#define CX_INLINE static inline
295#define CX_CPPDECL static inline
324#define cx_nmemb(arr) (sizeof(arr)/sizeof((arr)[0]))
330#if (__GNUC__ >= 5 || defined(__clang__)) && !defined(CX_NO_SZMUL_BUILTIN)
331#define CX_SZMUL_BUILTIN
332#define cx_szmul(a, b, result) __builtin_mul_overflow(a, b, result)
344#define cx_szmul(a, b, result) cx_szmul_impl(a, b, result)
size_t(* cx_write_func)(const void *, size_t, size_t, void *)
Function pointer compatible with fwrite-like functions.
Definition common.h:304
size_t(* cx_read_func)(void *, size_t, size_t, void *)
Function pointer compatible with fread-like functions.
Definition common.h:309
#define CX_EXPORT
Only used for building Windows DLLs.
Definition common.h:278
int cx_szmul_impl(size_t a, size_t b, size_t *result)
Implementation of cx_szmul() when no compiler builtin is available.