Ruby
3.5.0dev (2025-02-20 revision 34098b669c0cbc024cd08e686891f1dfe0a10aaf)
prism
defines.h
Go to the documentation of this file.
1
9
#ifndef PRISM_DEFINES_H
10
#define PRISM_DEFINES_H
11
12
#include <ctype.h>
13
#include <limits.h>
14
#include <math.h>
15
#include <
stdarg.h
>
16
#include <stddef.h>
17
#include <stdint.h>
18
#include <stdio.h>
19
#include <string.h>
20
25
#define __STDC_FORMAT_MACROS
26
// Include sys/types.h before inttypes.h to work around issue with
27
// certain versions of GCC and newlib which causes omission of PRIx64
28
#include <sys/types.h>
29
#include <inttypes.h>
30
36
#ifndef PRISM_DEPTH_MAXIMUM
37
#define PRISM_DEPTH_MAXIMUM 10000
38
#endif
39
45
#ifndef PRISM_EXPORTED_FUNCTION
46
# ifdef PRISM_EXPORT_SYMBOLS
47
# ifdef _WIN32
48
# define PRISM_EXPORTED_FUNCTION __declspec(dllexport) extern
49
# else
50
# define PRISM_EXPORTED_FUNCTION __attribute__((__visibility__("default"))) extern
51
# endif
52
# else
53
# define PRISM_EXPORTED_FUNCTION
54
# endif
55
#endif
56
63
#if defined(__GNUC__)
64
# if defined(__MINGW_PRINTF_FORMAT)
65
# define PRISM_ATTRIBUTE_FORMAT(string_index, argument_index) __attribute__((format(__MINGW_PRINTF_FORMAT, string_index, argument_index)))
66
# else
67
# define PRISM_ATTRIBUTE_FORMAT(string_index, argument_index) __attribute__((format(printf, string_index, argument_index)))
68
# endif
69
#elif defined(__clang__)
70
# define PRISM_ATTRIBUTE_FORMAT(string_index, argument_index) __attribute__((__format__(__printf__, string_index, argument_index)))
71
#else
72
# define PRISM_ATTRIBUTE_FORMAT(string_index, argument_index)
73
#endif
74
80
#if defined(__GNUC__)
81
# define PRISM_ATTRIBUTE_UNUSED __attribute__((unused))
82
#else
83
# define PRISM_ATTRIBUTE_UNUSED
84
#endif
85
90
#if defined(_MSC_VER) && !defined(inline)
91
# define inline __inline
92
#endif
93
98
#if !defined(snprintf) && defined(_MSC_VER) && (_MSC_VER < 1900)
99
# define snprintf _snprintf
100
#endif
101
106
#define PM_CONCATENATE(left, right) left ## right
107
113
#if defined(_Static_assert)
114
# define PM_STATIC_ASSERT(line, condition, message) _Static_assert(condition, message)
115
#else
116
# define PM_STATIC_ASSERT(line, condition, message) typedef char PM_CONCATENATE(static_assert_, line)[(condition) ? 1 : -1]
117
#endif
118
124
#ifdef _WIN32
125
# define PRISM_HAS_MMAP
126
#else
127
# include <unistd.h>
128
# ifdef _POSIX_MAPPED_FILES
129
# define PRISM_HAS_MMAP
130
# endif
131
#endif
132
138
#ifndef PRISM_HAS_NO_FILESYSTEM
139
# define PRISM_HAS_FILESYSTEM
140
#endif
141
147
#ifdef __MINGW64__
148
#include <float.h>
149
#define PRISM_ISINF(x) (!_finite(x))
150
#else
151
#define PRISM_ISINF(x) isinf(x)
152
#endif
153
171
#ifdef PRISM_XALLOCATOR
172
#include "prism_xallocator.h"
173
#else
174
#ifndef xmalloc
179
#define xmalloc malloc
180
#endif
181
182
#ifndef xrealloc
187
#define xrealloc realloc
188
#endif
189
190
#ifndef xcalloc
195
#define xcalloc calloc
196
#endif
197
198
#ifndef xfree
203
#define xfree free
204
#endif
205
#endif
206
211
#ifdef PRISM_BUILD_MINIMAL
213
#define PRISM_EXCLUDE_SERIALIZATION
214
216
#define PRISM_EXCLUDE_JSON
217
219
#define PRISM_EXCLUDE_PACK
220
222
#define PRISM_EXCLUDE_PRETTYPRINT
223
225
#define PRISM_ENCODING_EXCLUDE_FULL
226
#endif
227
232
#if defined(__GNUC__) || defined(__clang__)
234
#define PRISM_LIKELY(x) __builtin_expect(!!(x), 1)
235
237
#define PRISM_UNLIKELY(x) __builtin_expect(!!(x), 0)
238
#else
240
#define PRISM_LIKELY(x) (x)
241
243
#define PRISM_UNLIKELY(x) (x)
244
#endif
245
250
#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 202311L
// C23 or later
251
#define PRISM_FALLTHROUGH [[fallthrough]];
252
#elif defined(__GNUC__) || defined(__clang__)
253
#define PRISM_FALLTHROUGH __attribute__((fallthrough));
254
#elif defined(_MSC_VER)
255
#define PRISM_FALLTHROUGH __fallthrough;
256
#else
257
#define PRISM_FALLTHROUGH
258
#endif
259
260
#endif
stdarg.h
Defines old _.
Generated by
1.9.8