annotate SDL3/SDL_stdinc.h @ 1:20d02a178406 default tip

*: check in everything else yay
author Paper <paper@tflc.us>
date Mon, 05 Jan 2026 02:15:46 -0500
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1 /*
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2 Simple DirectMedia Layer
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3 Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5 This software is provided 'as-is', without any express or implied
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6 warranty. In no event will the authors be held liable for any damages
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
7 arising from the use of this software.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
8
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
9 Permission is granted to anyone to use this software for any purpose,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
10 including commercial applications, and to alter it and redistribute it
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
11 freely, subject to the following restrictions:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
12
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
13 1. The origin of this software must not be misrepresented; you must not
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
14 claim that you wrote the original software. If you use this software
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
15 in a product, an acknowledgment in the product documentation would be
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
16 appreciated but is not required.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
17 2. Altered source versions must be plainly marked as such, and must not be
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
18 misrepresented as being the original software.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
19 3. This notice may not be removed or altered from any source distribution.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
20 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
21
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
22 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
23 * # CategoryStdinc
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
24 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
25 * SDL provides its own implementation of some of the most important C runtime
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
26 * functions.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
27 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
28 * Using these functions allows an app to have access to common C
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
29 * functionality without depending on a specific C runtime (or a C runtime at
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
30 * all). More importantly, the SDL implementations work identically across
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
31 * platforms, so apps can avoid surprises like snprintf() behaving differently
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
32 * between Windows and Linux builds, or itoa() only existing on some
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
33 * platforms.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
34 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
35 * For many of the most common functions, like SDL_memcpy, SDL might just call
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
36 * through to the usual C runtime behind the scenes, if it makes sense to do
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
37 * so (if it's faster and always available/reliable on a given platform),
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
38 * reducing library size and offering the most optimized option.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
39 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
40 * SDL also offers other C-runtime-adjacent functionality in this header that
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
41 * either isn't, strictly speaking, part of any C runtime standards, like
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
42 * SDL_crc32() and SDL_reinterpret_cast, etc. It also offers a few better
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
43 * options, like SDL_strlcpy(), which functions as a safer form of strcpy().
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
44 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
45
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
46 #ifndef SDL_stdinc_h_
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
47 #define SDL_stdinc_h_
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
48
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
49 #include <SDL3/SDL_platform_defines.h>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
50
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
51 #include <stdarg.h>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
52 #include <string.h>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
53 #include <wchar.h>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
54
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
55 /* Most everything except Visual Studio 2008 and earlier has stdint.h now */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
56 #if defined(_MSC_VER) && (_MSC_VER < 1600)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
57 typedef signed __int8 int8_t;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
58 typedef unsigned __int8 uint8_t;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
59 typedef signed __int16 int16_t;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
60 typedef unsigned __int16 uint16_t;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
61 typedef signed __int32 int32_t;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
62 typedef unsigned __int32 uint32_t;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
63 typedef signed __int64 int64_t;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
64 typedef unsigned __int64 uint64_t;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
65 #ifndef _INTPTR_T_DEFINED
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
66 #ifdef _WIN64
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
67 typedef __int64 intptr_t;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
68 #else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
69 typedef int intptr_t;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
70 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
71 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
72 #ifndef _UINTPTR_T_DEFINED
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
73 #ifdef _WIN64
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
74 typedef unsigned __int64 uintptr_t;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
75 #else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
76 typedef unsigned int uintptr_t;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
77 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
78 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
79 #else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
80 #include <stdint.h>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
81 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
82
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
83 #if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
84 defined(SDL_INCLUDE_INTTYPES_H)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
85 #include <inttypes.h>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
86 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
87
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
88 #ifndef __cplusplus
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
89 #if defined(__has_include) && !defined(SDL_INCLUDE_STDBOOL_H)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
90 #if __has_include(<stdbool.h>)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
91 #define SDL_INCLUDE_STDBOOL_H
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
92 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
93 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
94 #if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
95 (defined(_MSC_VER) && (_MSC_VER >= 1910 /* Visual Studio 2017 */)) || \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
96 defined(SDL_INCLUDE_STDBOOL_H)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
97 #include <stdbool.h>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
98 #elif !defined(__bool_true_false_are_defined) && !defined(bool)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
99 #define bool unsigned char
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
100 #define false 0
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
101 #define true 1
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
102 #define __bool_true_false_are_defined 1
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
103 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
104 #endif /* !__cplusplus */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
105
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
106 #ifndef SDL_DISABLE_ALLOCA
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
107 # ifndef alloca
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
108 # ifdef HAVE_ALLOCA_H
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
109 # include <alloca.h>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
110 # elif defined(SDL_PLATFORM_NETBSD)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
111 # if defined(__STRICT_ANSI__)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
112 # define SDL_DISABLE_ALLOCA
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
113 # else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
114 # include <stdlib.h>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
115 # endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
116 # elif defined(__GNUC__)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
117 # define alloca __builtin_alloca
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
118 # elif defined(_MSC_VER)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
119 # include <malloc.h>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
120 # define alloca _alloca
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
121 # elif defined(__WATCOMC__)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
122 # include <malloc.h>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
123 # elif defined(__BORLANDC__)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
124 # include <malloc.h>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
125 # elif defined(__DMC__)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
126 # include <stdlib.h>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
127 # elif defined(SDL_PLATFORM_AIX)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
128 # pragma alloca
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
129 # elif defined(__MRC__)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
130 void *alloca(unsigned);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
131 # else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
132 void *alloca(size_t);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
133 # endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
134 # endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
135 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
136
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
137
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
138 #ifdef SDL_WIKI_DOCUMENTATION_SECTION
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
139
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
140 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
141 * Don't let SDL use "long long" C types.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
142 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
143 * SDL will define this if it believes the compiler doesn't understand the
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
144 * "long long" syntax for C datatypes. This can happen on older compilers.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
145 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
146 * If _your_ compiler doesn't support "long long" but SDL doesn't know it, it
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
147 * is safe to define this yourself to build against the SDL headers.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
148 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
149 * If this is defined, it will remove access to some C runtime support
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
150 * functions, like SDL_ulltoa and SDL_strtoll that refer to this datatype
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
151 * explicitly. The rest of SDL will still be available.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
152 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
153 * SDL's own source code cannot be built with a compiler that has this
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
154 * defined, for various technical reasons.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
155 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
156 #define SDL_NOLONGLONG 1
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
157
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
158 #elif defined(_MSC_VER) && (_MSC_VER < 1310) /* long long introduced in Visual Studio.NET 2003 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
159 # define SDL_NOLONGLONG 1
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
160 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
161
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
162
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
163 #ifdef SDL_WIKI_DOCUMENTATION_SECTION
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
164
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
165 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
166 * The largest value that a `size_t` can hold for the target platform.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
167 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
168 * `size_t` is generally the same size as a pointer in modern times, but this
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
169 * can get weird on very old and very esoteric machines. For example, on a
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
170 * 16-bit Intel 286, you might have a 32-bit "far" pointer (16-bit segment
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
171 * plus 16-bit offset), but `size_t` is 16 bits, because it can only deal with
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
172 * the offset into an individual segment.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
173 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
174 * In modern times, it's generally expected to cover an entire linear address
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
175 * space. But be careful!
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
176 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
177 * \since This macro is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
178 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
179 #define SDL_SIZE_MAX SIZE_MAX
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
180
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
181 #elif defined(SIZE_MAX)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
182 # define SDL_SIZE_MAX SIZE_MAX
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
183 #else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
184 # define SDL_SIZE_MAX ((size_t) -1)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
185 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
186
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
187 #ifndef SDL_COMPILE_TIME_ASSERT
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
188 #ifdef SDL_WIKI_DOCUMENTATION_SECTION
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
189
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
190 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
191 * A compile-time assertion.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
192 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
193 * This can check constant values _known to the compiler at build time_ for
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
194 * correctness, and end the compile with the error if they fail.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
195 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
196 * Often times these are used to verify basic truths, like the size of a
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
197 * datatype is what is expected:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
198 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
199 * ```c
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
200 * SDL_COMPILE_TIME_ASSERT(uint32_size, sizeof(Uint32) == 4);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
201 * ```
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
202 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
203 * The `name` parameter must be a valid C symbol, and must be unique across
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
204 * all compile-time asserts in the same compilation unit (one run of the
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
205 * compiler), or the build might fail with cryptic errors on some targets.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
206 * This is used with a C language trick that works on older compilers that
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
207 * don't support better assertion techniques.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
208 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
209 * If you need an assertion that operates at runtime, on variable data, you
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
210 * should try SDL_assert instead.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
211 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
212 * \param name a unique identifier for this assertion.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
213 * \param x the value to test. Must be a boolean value.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
214 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
215 * \threadsafety This macro doesn't generate any code to run.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
216 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
217 * \since This macro is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
218 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
219 * \sa SDL_assert
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
220 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
221 #define SDL_COMPILE_TIME_ASSERT(name, x) FailToCompileIf_x_IsFalse(x)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
222 #elif defined(__cplusplus)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
223 /* Keep C++ case alone: Some versions of gcc will define __STDC_VERSION__ even when compiling in C++ mode. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
224 #if (__cplusplus >= 201103L)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
225 #define SDL_COMPILE_TIME_ASSERT(name, x) static_assert(x, #x)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
226 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
227 #elif defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 202311L)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
228 #define SDL_COMPILE_TIME_ASSERT(name, x) static_assert(x, #x)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
229 #elif defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
230 #define SDL_COMPILE_TIME_ASSERT(name, x) _Static_assert(x, #x)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
231 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
232 #endif /* !SDL_COMPILE_TIME_ASSERT */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
233
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
234 #ifndef SDL_COMPILE_TIME_ASSERT
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
235 /* universal, but may trigger -Wunused-local-typedefs */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
236 #define SDL_COMPILE_TIME_ASSERT(name, x) \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
237 typedef int SDL_compile_time_assert_ ## name[(x) * 2 - 1]
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
238 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
239
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
240 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
241 * The number of elements in a static array.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
242 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
243 * This will compile but return incorrect results for a pointer to an array;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
244 * it has to be an array the compiler knows the size of.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
245 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
246 * This macro looks like it double-evaluates the argument, but it does so
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
247 * inside of `sizeof`, so there are no side-effects here, as expressions do
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
248 * not actually run any code in these cases.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
249 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
250 * \since This macro is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
251 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
252 #define SDL_arraysize(array) (sizeof(array)/sizeof(array[0]))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
253
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
254 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
255 * Macro useful for building other macros with strings in them.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
256 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
257 * For example:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
258 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
259 * ```c
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
260 * #define LOG_ERROR(X) OutputDebugString(SDL_STRINGIFY_ARG(__FUNCTION__) ": " X "\n")`
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
261 * ```
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
262 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
263 * \param arg the text to turn into a string literal.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
264 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
265 * \since This macro is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
266 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
267 #define SDL_STRINGIFY_ARG(arg) #arg
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
268
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
269 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
270 * \name Cast operators
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
271 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
272 * Use proper C++ casts when compiled as C++ to be compatible with the option
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
273 * -Wold-style-cast of GCC (and -Werror=old-style-cast in GCC 4.2 and above).
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
274 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
275 /* @{ */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
276
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
277 #ifdef SDL_WIKI_DOCUMENTATION_SECTION
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
278
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
279 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
280 * Handle a Reinterpret Cast properly whether using C or C++.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
281 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
282 * If compiled as C++, this macro offers a proper C++ reinterpret_cast<>.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
283 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
284 * If compiled as C, this macro does a normal C-style cast.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
285 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
286 * This is helpful to avoid compiler warnings in C++.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
287 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
288 * \param type the type to cast the expression to.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
289 * \param expression the expression to cast to a different type.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
290 * \returns `expression`, cast to `type`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
291 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
292 * \threadsafety It is safe to call this macro from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
293 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
294 * \since This macro is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
295 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
296 * \sa SDL_static_cast
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
297 * \sa SDL_const_cast
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
298 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
299 #define SDL_reinterpret_cast(type, expression) reinterpret_cast<type>(expression) /* or `((type)(expression))` in C */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
300
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
301 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
302 * Handle a Static Cast properly whether using C or C++.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
303 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
304 * If compiled as C++, this macro offers a proper C++ static_cast<>.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
305 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
306 * If compiled as C, this macro does a normal C-style cast.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
307 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
308 * This is helpful to avoid compiler warnings in C++.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
309 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
310 * \param type the type to cast the expression to.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
311 * \param expression the expression to cast to a different type.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
312 * \returns `expression`, cast to `type`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
313 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
314 * \threadsafety It is safe to call this macro from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
315 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
316 * \since This macro is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
317 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
318 * \sa SDL_reinterpret_cast
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
319 * \sa SDL_const_cast
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
320 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
321 #define SDL_static_cast(type, expression) static_cast<type>(expression) /* or `((type)(expression))` in C */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
322
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
323 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
324 * Handle a Const Cast properly whether using C or C++.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
325 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
326 * If compiled as C++, this macro offers a proper C++ const_cast<>.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
327 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
328 * If compiled as C, this macro does a normal C-style cast.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
329 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
330 * This is helpful to avoid compiler warnings in C++.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
331 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
332 * \param type the type to cast the expression to.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
333 * \param expression the expression to cast to a different type.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
334 * \returns `expression`, cast to `type`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
335 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
336 * \threadsafety It is safe to call this macro from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
337 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
338 * \since This macro is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
339 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
340 * \sa SDL_reinterpret_cast
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
341 * \sa SDL_static_cast
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
342 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
343 #define SDL_const_cast(type, expression) const_cast<type>(expression) /* or `((type)(expression))` in C */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
344
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
345 #elif defined(__cplusplus)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
346 #define SDL_reinterpret_cast(type, expression) reinterpret_cast<type>(expression)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
347 #define SDL_static_cast(type, expression) static_cast<type>(expression)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
348 #define SDL_const_cast(type, expression) const_cast<type>(expression)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
349 #else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
350 #define SDL_reinterpret_cast(type, expression) ((type)(expression))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
351 #define SDL_static_cast(type, expression) ((type)(expression))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
352 #define SDL_const_cast(type, expression) ((type)(expression))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
353 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
354
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
355 /* @} *//* Cast operators */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
356
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
357 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
358 * Define a four character code as a Uint32.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
359 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
360 * \param A the first ASCII character.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
361 * \param B the second ASCII character.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
362 * \param C the third ASCII character.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
363 * \param D the fourth ASCII character.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
364 * \returns the four characters converted into a Uint32, one character
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
365 * per-byte.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
366 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
367 * \threadsafety It is safe to call this macro from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
368 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
369 * \since This macro is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
370 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
371 #define SDL_FOURCC(A, B, C, D) \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
372 ((SDL_static_cast(Uint32, SDL_static_cast(Uint8, (A))) << 0) | \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
373 (SDL_static_cast(Uint32, SDL_static_cast(Uint8, (B))) << 8) | \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
374 (SDL_static_cast(Uint32, SDL_static_cast(Uint8, (C))) << 16) | \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
375 (SDL_static_cast(Uint32, SDL_static_cast(Uint8, (D))) << 24))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
376
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
377 #ifdef SDL_WIKI_DOCUMENTATION_SECTION
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
378
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
379 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
380 * Append the 64 bit integer suffix to a signed integer literal.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
381 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
382 * This helps compilers that might believe a integer literal larger than
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
383 * 0xFFFFFFFF is overflowing a 32-bit value. Use `SDL_SINT64_C(0xFFFFFFFF1)`
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
384 * instead of `0xFFFFFFFF1` by itself.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
385 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
386 * \since This macro is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
387 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
388 * \sa SDL_UINT64_C
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
389 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
390 #define SDL_SINT64_C(c) c ## LL /* or whatever the current compiler uses. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
391
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
392 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
393 * Append the 64 bit integer suffix to an unsigned integer literal.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
394 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
395 * This helps compilers that might believe a integer literal larger than
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
396 * 0xFFFFFFFF is overflowing a 32-bit value. Use `SDL_UINT64_C(0xFFFFFFFF1)`
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
397 * instead of `0xFFFFFFFF1` by itself.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
398 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
399 * \since This macro is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
400 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
401 * \sa SDL_SINT64_C
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
402 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
403 #define SDL_UINT64_C(c) c ## ULL /* or whatever the current compiler uses. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
404
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
405 #else /* !SDL_WIKI_DOCUMENTATION_SECTION */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
406
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
407 #ifndef SDL_SINT64_C
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
408 #if defined(INT64_C)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
409 #define SDL_SINT64_C(c) INT64_C(c)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
410 #elif defined(_MSC_VER)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
411 #define SDL_SINT64_C(c) c ## i64
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
412 #elif defined(__LP64__) || defined(_LP64)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
413 #define SDL_SINT64_C(c) c ## L
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
414 #else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
415 #define SDL_SINT64_C(c) c ## LL
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
416 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
417 #endif /* !SDL_SINT64_C */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
418
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
419 #ifndef SDL_UINT64_C
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
420 #if defined(UINT64_C)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
421 #define SDL_UINT64_C(c) UINT64_C(c)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
422 #elif defined(_MSC_VER)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
423 #define SDL_UINT64_C(c) c ## ui64
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
424 #elif defined(__LP64__) || defined(_LP64)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
425 #define SDL_UINT64_C(c) c ## UL
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
426 #else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
427 #define SDL_UINT64_C(c) c ## ULL
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
428 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
429 #endif /* !SDL_UINT64_C */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
430
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
431 #endif /* !SDL_WIKI_DOCUMENTATION_SECTION */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
432
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
433 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
434 * \name Basic data types
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
435 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
436 /* @{ */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
437
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
438 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
439 * A signed 8-bit integer type.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
440 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
441 * \since This macro is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
442 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
443 typedef int8_t Sint8;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
444 #define SDL_MAX_SINT8 ((Sint8)0x7F) /* 127 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
445 #define SDL_MIN_SINT8 ((Sint8)(~0x7F)) /* -128 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
446
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
447 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
448 * An unsigned 8-bit integer type.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
449 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
450 * \since This macro is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
451 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
452 typedef uint8_t Uint8;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
453 #define SDL_MAX_UINT8 ((Uint8)0xFF) /* 255 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
454 #define SDL_MIN_UINT8 ((Uint8)0x00) /* 0 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
455
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
456 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
457 * A signed 16-bit integer type.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
458 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
459 * \since This macro is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
460 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
461 typedef int16_t Sint16;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
462 #define SDL_MAX_SINT16 ((Sint16)0x7FFF) /* 32767 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
463 #define SDL_MIN_SINT16 ((Sint16)(~0x7FFF)) /* -32768 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
464
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
465 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
466 * An unsigned 16-bit integer type.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
467 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
468 * \since This macro is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
469 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
470 typedef uint16_t Uint16;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
471 #define SDL_MAX_UINT16 ((Uint16)0xFFFF) /* 65535 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
472 #define SDL_MIN_UINT16 ((Uint16)0x0000) /* 0 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
473
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
474 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
475 * A signed 32-bit integer type.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
476 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
477 * \since This macro is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
478 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
479 typedef int32_t Sint32;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
480 #define SDL_MAX_SINT32 ((Sint32)0x7FFFFFFF) /* 2147483647 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
481 #define SDL_MIN_SINT32 ((Sint32)(~0x7FFFFFFF)) /* -2147483648 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
482
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
483 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
484 * An unsigned 32-bit integer type.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
485 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
486 * \since This macro is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
487 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
488 typedef uint32_t Uint32;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
489 #define SDL_MAX_UINT32 ((Uint32)0xFFFFFFFFu) /* 4294967295 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
490 #define SDL_MIN_UINT32 ((Uint32)0x00000000) /* 0 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
491
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
492 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
493 * A signed 64-bit integer type.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
494 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
495 * \since This macro is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
496 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
497 * \sa SDL_SINT64_C
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
498 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
499 typedef int64_t Sint64;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
500 #define SDL_MAX_SINT64 SDL_SINT64_C(0x7FFFFFFFFFFFFFFF) /* 9223372036854775807 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
501 #define SDL_MIN_SINT64 ~SDL_SINT64_C(0x7FFFFFFFFFFFFFFF) /* -9223372036854775808 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
502
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
503 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
504 * An unsigned 64-bit integer type.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
505 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
506 * \since This macro is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
507 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
508 * \sa SDL_UINT64_C
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
509 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
510 typedef uint64_t Uint64;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
511 #define SDL_MAX_UINT64 SDL_UINT64_C(0xFFFFFFFFFFFFFFFF) /* 18446744073709551615 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
512 #define SDL_MIN_UINT64 SDL_UINT64_C(0x0000000000000000) /* 0 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
513
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
514 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
515 * SDL times are signed, 64-bit integers representing nanoseconds since the
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
516 * Unix epoch (Jan 1, 1970).
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
517 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
518 * They can be converted between POSIX time_t values with SDL_NS_TO_SECONDS()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
519 * and SDL_SECONDS_TO_NS(), and between Windows FILETIME values with
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
520 * SDL_TimeToWindows() and SDL_TimeFromWindows().
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
521 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
522 * \since This datatype is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
523 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
524 * \sa SDL_MAX_SINT64
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
525 * \sa SDL_MIN_SINT64
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
526 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
527 typedef Sint64 SDL_Time;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
528 #define SDL_MAX_TIME SDL_MAX_SINT64
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
529 #define SDL_MIN_TIME SDL_MIN_SINT64
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
530
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
531 /* @} *//* Basic data types */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
532
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
533 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
534 * \name Floating-point constants
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
535 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
536 /* @{ */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
537
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
538 #ifdef FLT_EPSILON
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
539 #define SDL_FLT_EPSILON FLT_EPSILON
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
540 #else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
541
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
542 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
543 * Epsilon constant, used for comparing floating-point numbers.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
544 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
545 * Equals by default to platform-defined `FLT_EPSILON`, or
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
546 * `1.1920928955078125e-07F` if that's not available.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
547 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
548 * \since This macro is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
549 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
550 #define SDL_FLT_EPSILON 1.1920928955078125e-07F /* 0x0.000002p0 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
551 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
552
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
553 /* @} *//* Floating-point constants */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
554
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
555 #ifdef SDL_WIKI_DOCUMENTATION_SECTION
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
556
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
557 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
558 * A printf-formatting string for an Sint64 value.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
559 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
560 * Use it like this:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
561 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
562 * ```c
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
563 * SDL_Log("There are %" SDL_PRIs64 " bottles of beer on the wall.", bottles);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
564 * ```
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
565 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
566 * \since This macro is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
567 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
568 #define SDL_PRIs64 "lld"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
569
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
570 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
571 * A printf-formatting string for a Uint64 value.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
572 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
573 * Use it like this:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
574 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
575 * ```c
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
576 * SDL_Log("There are %" SDL_PRIu64 " bottles of beer on the wall.", bottles);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
577 * ```
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
578 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
579 * \since This macro is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
580 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
581 #define SDL_PRIu64 "llu"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
582
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
583 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
584 * A printf-formatting string for a Uint64 value as lower-case hexadecimal.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
585 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
586 * Use it like this:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
587 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
588 * ```c
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
589 * SDL_Log("There are %" SDL_PRIx64 " bottles of beer on the wall.", bottles);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
590 * ```
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
591 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
592 * \since This macro is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
593 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
594 #define SDL_PRIx64 "llx"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
595
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
596 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
597 * A printf-formatting string for a Uint64 value as upper-case hexadecimal.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
598 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
599 * Use it like this:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
600 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
601 * ```c
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
602 * SDL_Log("There are %" SDL_PRIX64 " bottles of beer on the wall.", bottles);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
603 * ```
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
604 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
605 * \since This macro is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
606 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
607 #define SDL_PRIX64 "llX"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
608
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
609 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
610 * A printf-formatting string for an Sint32 value.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
611 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
612 * Use it like this:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
613 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
614 * ```c
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
615 * SDL_Log("There are %" SDL_PRIs32 " bottles of beer on the wall.", bottles);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
616 * ```
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
617 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
618 * \since This macro is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
619 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
620 #define SDL_PRIs32 "d"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
621
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
622 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
623 * A printf-formatting string for a Uint32 value.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
624 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
625 * Use it like this:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
626 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
627 * ```c
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
628 * SDL_Log("There are %" SDL_PRIu32 " bottles of beer on the wall.", bottles);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
629 * ```
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
630 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
631 * \since This macro is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
632 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
633 #define SDL_PRIu32 "u"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
634
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
635 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
636 * A printf-formatting string for a Uint32 value as lower-case hexadecimal.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
637 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
638 * Use it like this:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
639 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
640 * ```c
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
641 * SDL_Log("There are %" SDL_PRIx32 " bottles of beer on the wall.", bottles);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
642 * ```
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
643 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
644 * \since This macro is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
645 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
646 #define SDL_PRIx32 "x"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
647
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
648 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
649 * A printf-formatting string for a Uint32 value as upper-case hexadecimal.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
650 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
651 * Use it like this:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
652 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
653 * ```c
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
654 * SDL_Log("There are %" SDL_PRIX32 " bottles of beer on the wall.", bottles);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
655 * ```
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
656 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
657 * \since This macro is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
658 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
659 #define SDL_PRIX32 "X"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
660
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
661 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
662 * A printf-formatting string prefix for a `long long` value.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
663 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
664 * This is just the prefix! You probably actually want SDL_PRILLd, SDL_PRILLu,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
665 * SDL_PRILLx, or SDL_PRILLX instead.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
666 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
667 * Use it like this:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
668 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
669 * ```c
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
670 * SDL_Log("There are %" SDL_PRILL_PREFIX "d bottles of beer on the wall.", bottles);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
671 * ```
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
672 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
673 * \since This macro is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
674 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
675 #define SDL_PRILL_PREFIX "ll"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
676
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
677 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
678 * A printf-formatting string for a `long long` value.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
679 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
680 * Use it like this:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
681 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
682 * ```c
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
683 * SDL_Log("There are %" SDL_PRILLd " bottles of beer on the wall.", bottles);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
684 * ```
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
685 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
686 * \since This macro is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
687 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
688 #define SDL_PRILLd SDL_PRILL_PREFIX "d"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
689
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
690 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
691 * A printf-formatting string for a `unsigned long long` value.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
692 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
693 * Use it like this:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
694 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
695 * ```c
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
696 * SDL_Log("There are %" SDL_PRILLu " bottles of beer on the wall.", bottles);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
697 * ```
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
698 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
699 * \since This macro is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
700 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
701 #define SDL_PRILLu SDL_PRILL_PREFIX "u"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
702
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
703 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
704 * A printf-formatting string for an `unsigned long long` value as lower-case
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
705 * hexadecimal.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
706 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
707 * Use it like this:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
708 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
709 * ```c
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
710 * SDL_Log("There are %" SDL_PRILLx " bottles of beer on the wall.", bottles);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
711 * ```
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
712 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
713 * \since This macro is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
714 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
715 #define SDL_PRILLx SDL_PRILL_PREFIX "x"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
716
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
717 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
718 * A printf-formatting string for an `unsigned long long` value as upper-case
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
719 * hexadecimal.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
720 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
721 * Use it like this:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
722 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
723 * ```c
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
724 * SDL_Log("There are %" SDL_PRILLX " bottles of beer on the wall.", bottles);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
725 * ```
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
726 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
727 * \since This macro is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
728 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
729 #define SDL_PRILLX SDL_PRILL_PREFIX "X"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
730 #endif /* SDL_WIKI_DOCUMENTATION_SECTION */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
731
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
732 /* Make sure we have macros for printing width-based integers.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
733 * <inttypes.h> should define these but this is not true all platforms.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
734 * (for example win32) */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
735 #ifndef SDL_PRIs64
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
736 #if defined(SDL_PLATFORM_WINDOWS)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
737 #define SDL_PRIs64 "I64d"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
738 #elif defined(PRId64)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
739 #define SDL_PRIs64 PRId64
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
740 #elif defined(__LP64__) && !defined(SDL_PLATFORM_APPLE) && !defined(__EMSCRIPTEN__)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
741 #define SDL_PRIs64 "ld"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
742 #else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
743 #define SDL_PRIs64 "lld"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
744 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
745 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
746 #ifndef SDL_PRIu64
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
747 #if defined(SDL_PLATFORM_WINDOWS)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
748 #define SDL_PRIu64 "I64u"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
749 #elif defined(PRIu64)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
750 #define SDL_PRIu64 PRIu64
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
751 #elif defined(__LP64__) && !defined(SDL_PLATFORM_APPLE) && !defined(__EMSCRIPTEN__)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
752 #define SDL_PRIu64 "lu"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
753 #else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
754 #define SDL_PRIu64 "llu"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
755 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
756 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
757 #ifndef SDL_PRIx64
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
758 #if defined(SDL_PLATFORM_WINDOWS)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
759 #define SDL_PRIx64 "I64x"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
760 #elif defined(PRIx64)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
761 #define SDL_PRIx64 PRIx64
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
762 #elif defined(__LP64__) && !defined(SDL_PLATFORM_APPLE)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
763 #define SDL_PRIx64 "lx"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
764 #else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
765 #define SDL_PRIx64 "llx"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
766 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
767 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
768 #ifndef SDL_PRIX64
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
769 #if defined(SDL_PLATFORM_WINDOWS)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
770 #define SDL_PRIX64 "I64X"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
771 #elif defined(PRIX64)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
772 #define SDL_PRIX64 PRIX64
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
773 #elif defined(__LP64__) && !defined(SDL_PLATFORM_APPLE)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
774 #define SDL_PRIX64 "lX"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
775 #else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
776 #define SDL_PRIX64 "llX"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
777 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
778 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
779 #ifndef SDL_PRIs32
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
780 #ifdef PRId32
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
781 #define SDL_PRIs32 PRId32
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
782 #else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
783 #define SDL_PRIs32 "d"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
784 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
785 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
786 #ifndef SDL_PRIu32
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
787 #ifdef PRIu32
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
788 #define SDL_PRIu32 PRIu32
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
789 #else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
790 #define SDL_PRIu32 "u"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
791 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
792 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
793 #ifndef SDL_PRIx32
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
794 #ifdef PRIx32
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
795 #define SDL_PRIx32 PRIx32
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
796 #else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
797 #define SDL_PRIx32 "x"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
798 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
799 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
800 #ifndef SDL_PRIX32
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
801 #ifdef PRIX32
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
802 #define SDL_PRIX32 PRIX32
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
803 #else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
804 #define SDL_PRIX32 "X"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
805 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
806 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
807 /* Specifically for the `long long` -- SDL-specific. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
808 #ifdef SDL_PLATFORM_WINDOWS
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
809 #ifndef SDL_NOLONGLONG
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
810 SDL_COMPILE_TIME_ASSERT(longlong_size64, sizeof(long long) == 8); /* using I64 for windows - make sure `long long` is 64 bits. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
811 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
812 #define SDL_PRILL_PREFIX "I64"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
813 #else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
814 #define SDL_PRILL_PREFIX "ll"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
815 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
816 #ifndef SDL_PRILLd
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
817 #define SDL_PRILLd SDL_PRILL_PREFIX "d"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
818 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
819 #ifndef SDL_PRILLu
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
820 #define SDL_PRILLu SDL_PRILL_PREFIX "u"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
821 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
822 #ifndef SDL_PRILLx
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
823 #define SDL_PRILLx SDL_PRILL_PREFIX "x"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
824 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
825 #ifndef SDL_PRILLX
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
826 #define SDL_PRILLX SDL_PRILL_PREFIX "X"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
827 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
828
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
829 /* Annotations to help code analysis tools */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
830 #ifdef SDL_WIKI_DOCUMENTATION_SECTION
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
831
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
832 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
833 * Macro that annotates function params with input buffer size.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
834 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
835 * If we were to annotate `memcpy`:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
836 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
837 * ```c
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
838 * void *memcpy(void *dst, SDL_IN_BYTECAP(len) const void *src, size_t len);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
839 * ```
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
840 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
841 * This notes that `src` should be `len` bytes in size and is only read by the
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
842 * function. The compiler or other analysis tools can warn when this doesn't
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
843 * appear to be the case.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
844 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
845 * On compilers without this annotation mechanism, this is defined to nothing.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
846 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
847 * \since This macro is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
848 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
849 #define SDL_IN_BYTECAP(x) _In_bytecount_(x)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
850
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
851 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
852 * Macro that annotates function params with input/output string buffer size.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
853 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
854 * If we were to annotate `strlcat`:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
855 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
856 * ```c
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
857 * size_t strlcat(SDL_INOUT_Z_CAP(maxlen) char *dst, const char *src, size_t maxlen);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
858 * ```
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
859 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
860 * This notes that `dst` is a null-terminated C string, should be `maxlen`
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
861 * bytes in size, and is both read from and written to by the function. The
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
862 * compiler or other analysis tools can warn when this doesn't appear to be
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
863 * the case.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
864 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
865 * On compilers without this annotation mechanism, this is defined to nothing.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
866 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
867 * \since This macro is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
868 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
869 #define SDL_INOUT_Z_CAP(x) _Inout_z_cap_(x)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
870
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
871 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
872 * Macro that annotates function params with output string buffer size.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
873 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
874 * If we were to annotate `snprintf`:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
875 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
876 * ```c
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
877 * int snprintf(SDL_OUT_Z_CAP(maxlen) char *text, size_t maxlen, const char *fmt, ...);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
878 * ```
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
879 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
880 * This notes that `text` is a null-terminated C string, should be `maxlen`
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
881 * bytes in size, and is only written to by the function. The compiler or
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
882 * other analysis tools can warn when this doesn't appear to be the case.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
883 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
884 * On compilers without this annotation mechanism, this is defined to nothing.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
885 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
886 * \since This macro is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
887 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
888 #define SDL_OUT_Z_CAP(x) _Out_z_cap_(x)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
889
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
890 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
891 * Macro that annotates function params with output buffer size.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
892 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
893 * If we were to annotate `wcsncpy`:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
894 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
895 * ```c
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
896 * char *wcscpy(SDL_OUT_CAP(bufsize) wchar_t *dst, const wchar_t *src, size_t bufsize);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
897 * ```
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
898 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
899 * This notes that `dst` should have a capacity of `bufsize` wchar_t in size,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
900 * and is only written to by the function. The compiler or other analysis
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
901 * tools can warn when this doesn't appear to be the case.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
902 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
903 * This operates on counts of objects, not bytes. Use SDL_OUT_BYTECAP for
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
904 * bytes.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
905 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
906 * On compilers without this annotation mechanism, this is defined to nothing.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
907 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
908 * \since This macro is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
909 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
910 #define SDL_OUT_CAP(x) _Out_cap_(x)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
911
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
912 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
913 * Macro that annotates function params with output buffer size.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
914 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
915 * If we were to annotate `memcpy`:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
916 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
917 * ```c
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
918 * void *memcpy(SDL_OUT_BYTECAP(bufsize) void *dst, const void *src, size_t bufsize);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
919 * ```
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
920 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
921 * This notes that `dst` should have a capacity of `bufsize` bytes in size,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
922 * and is only written to by the function. The compiler or other analysis
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
923 * tools can warn when this doesn't appear to be the case.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
924 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
925 * On compilers without this annotation mechanism, this is defined to nothing.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
926 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
927 * \since This macro is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
928 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
929 #define SDL_OUT_BYTECAP(x) _Out_bytecap_(x)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
930
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
931 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
932 * Macro that annotates function params with output buffer string size.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
933 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
934 * If we were to annotate `strcpy`:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
935 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
936 * ```c
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
937 * char *strcpy(SDL_OUT_Z_BYTECAP(bufsize) char *dst, const char *src, size_t bufsize);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
938 * ```
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
939 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
940 * This notes that `dst` should have a capacity of `bufsize` bytes in size,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
941 * and a zero-terminated string is written to it by the function. The compiler
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
942 * or other analysis tools can warn when this doesn't appear to be the case.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
943 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
944 * On compilers without this annotation mechanism, this is defined to nothing.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
945 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
946 * \since This macro is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
947 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
948 #define SDL_OUT_Z_BYTECAP(x) _Out_z_bytecap_(x)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
949
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
950 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
951 * Macro that annotates function params as printf-style format strings.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
952 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
953 * If we were to annotate `fprintf`:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
954 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
955 * ```c
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
956 * int fprintf(FILE *f, SDL_PRINTF_FORMAT_STRING const char *fmt, ...);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
957 * ```
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
958 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
959 * This notes that `fmt` should be a printf-style format string. The compiler
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
960 * or other analysis tools can warn when this doesn't appear to be the case.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
961 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
962 * On compilers without this annotation mechanism, this is defined to nothing.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
963 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
964 * \since This macro is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
965 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
966 #define SDL_PRINTF_FORMAT_STRING _Printf_format_string_
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
967
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
968 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
969 * Macro that annotates function params as scanf-style format strings.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
970 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
971 * If we were to annotate `fscanf`:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
972 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
973 * ```c
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
974 * int fscanf(FILE *f, SDL_SCANF_FORMAT_STRING const char *fmt, ...);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
975 * ```
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
976 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
977 * This notes that `fmt` should be a scanf-style format string. The compiler
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
978 * or other analysis tools can warn when this doesn't appear to be the case.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
979 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
980 * On compilers without this annotation mechanism, this is defined to nothing.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
981 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
982 * \since This macro is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
983 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
984 #define SDL_SCANF_FORMAT_STRING _Scanf_format_string_impl_
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
985
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
986 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
987 * Macro that annotates a vararg function that operates like printf.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
988 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
989 * If we were to annotate `fprintf`:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
990 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
991 * ```c
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
992 * int fprintf(FILE *f, const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(2);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
993 * ```
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
994 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
995 * This notes that the second parameter should be a printf-style format
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
996 * string, followed by `...`. The compiler or other analysis tools can warn
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
997 * when this doesn't appear to be the case.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
998 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
999 * On compilers without this annotation mechanism, this is defined to nothing.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1000 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1001 * This can (and should) be used with SDL_PRINTF_FORMAT_STRING as well, which
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1002 * between them will cover at least Visual Studio, GCC, and Clang.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1003 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1004 * \since This macro is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1005 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1006 #define SDL_PRINTF_VARARG_FUNC( fmtargnumber ) __attribute__ (( format( __printf__, fmtargnumber, fmtargnumber+1 )))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1007
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1008 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1009 * Macro that annotates a va_list function that operates like printf.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1010 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1011 * If we were to annotate `vfprintf`:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1012 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1013 * ```c
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1014 * int vfprintf(FILE *f, const char *fmt, va_list ap) SDL_PRINTF_VARARG_FUNCV(2);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1015 * ```
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1016 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1017 * This notes that the second parameter should be a printf-style format
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1018 * string, followed by a va_list. The compiler or other analysis tools can
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1019 * warn when this doesn't appear to be the case.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1020 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1021 * On compilers without this annotation mechanism, this is defined to nothing.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1022 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1023 * This can (and should) be used with SDL_PRINTF_FORMAT_STRING as well, which
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1024 * between them will cover at least Visual Studio, GCC, and Clang.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1025 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1026 * \since This macro is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1027 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1028 #define SDL_PRINTF_VARARG_FUNCV( fmtargnumber ) __attribute__(( format( __printf__, fmtargnumber, 0 )))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1029
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1030 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1031 * Macro that annotates a vararg function that operates like scanf.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1032 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1033 * If we were to annotate `fscanf`:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1034 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1035 * ```c
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1036 * int fscanf(FILE *f, const char *fmt, ...) SDL_PRINTF_VARARG_FUNCV(2);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1037 * ```
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1038 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1039 * This notes that the second parameter should be a scanf-style format string,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1040 * followed by `...`. The compiler or other analysis tools can warn when this
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1041 * doesn't appear to be the case.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1042 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1043 * On compilers without this annotation mechanism, this is defined to nothing.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1044 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1045 * This can (and should) be used with SDL_SCANF_FORMAT_STRING as well, which
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1046 * between them will cover at least Visual Studio, GCC, and Clang.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1047 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1048 * \since This macro is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1049 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1050 #define SDL_SCANF_VARARG_FUNC( fmtargnumber ) __attribute__ (( format( __scanf__, fmtargnumber, fmtargnumber+1 )))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1051
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1052 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1053 * Macro that annotates a va_list function that operates like scanf.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1054 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1055 * If we were to annotate `vfscanf`:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1056 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1057 * ```c
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1058 * int vfscanf(FILE *f, const char *fmt, va_list ap) SDL_PRINTF_VARARG_FUNCV(2);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1059 * ```
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1060 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1061 * This notes that the second parameter should be a scanf-style format string,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1062 * followed by a va_list. The compiler or other analysis tools can warn when
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1063 * this doesn't appear to be the case.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1064 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1065 * On compilers without this annotation mechanism, this is defined to nothing.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1066 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1067 * This can (and should) be used with SDL_SCANF_FORMAT_STRING as well, which
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1068 * between them will cover at least Visual Studio, GCC, and Clang.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1069 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1070 * \since This macro is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1071 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1072 #define SDL_SCANF_VARARG_FUNCV( fmtargnumber ) __attribute__(( format( __scanf__, fmtargnumber, 0 )))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1073
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1074 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1075 * Macro that annotates a vararg function that operates like wprintf.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1076 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1077 * If we were to annotate `fwprintf`:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1078 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1079 * ```c
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1080 * int fwprintf(FILE *f, const wchar_t *fmt, ...) SDL_WPRINTF_VARARG_FUNC(2);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1081 * ```
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1082 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1083 * This notes that the second parameter should be a wprintf-style format wide
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1084 * string, followed by `...`. The compiler or other analysis tools can warn
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1085 * when this doesn't appear to be the case.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1086 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1087 * On compilers without this annotation mechanism, this is defined to nothing.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1088 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1089 * This can (and should) be used with SDL_PRINTF_FORMAT_STRING as well, which
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1090 * between them will cover at least Visual Studio, GCC, and Clang.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1091 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1092 * \since This macro is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1093 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1094 #define SDL_WPRINTF_VARARG_FUNC( fmtargnumber ) /* __attribute__ (( format( __wprintf__, fmtargnumber, fmtargnumber+1 ))) */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1095
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1096 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1097 * Macro that annotates a va_list function that operates like wprintf.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1098 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1099 * If we were to annotate `vfwprintf`:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1100 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1101 * ```c
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1102 * int vfwprintf(FILE *f, const wchar_t *fmt, va_list ap) SDL_WPRINTF_VARARG_FUNC(2);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1103 * ```
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1104 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1105 * This notes that the second parameter should be a wprintf-style format wide
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1106 * string, followed by a va_list. The compiler or other analysis tools can
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1107 * warn when this doesn't appear to be the case.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1108 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1109 * On compilers without this annotation mechanism, this is defined to nothing.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1110 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1111 * This can (and should) be used with SDL_PRINTF_FORMAT_STRING as well, which
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1112 * between them will cover at least Visual Studio, GCC, and Clang.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1113 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1114 * \since This macro is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1115 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1116 #define SDL_WPRINTF_VARARG_FUNCV( fmtargnumber ) /* __attribute__ (( format( __wprintf__, fmtargnumber, 0 ))) */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1117
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1118 #elif defined(SDL_DISABLE_ANALYZE_MACROS)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1119 #define SDL_IN_BYTECAP(x)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1120 #define SDL_INOUT_Z_CAP(x)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1121 #define SDL_OUT_Z_CAP(x)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1122 #define SDL_OUT_CAP(x)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1123 #define SDL_OUT_BYTECAP(x)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1124 #define SDL_OUT_Z_BYTECAP(x)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1125 #define SDL_PRINTF_FORMAT_STRING
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1126 #define SDL_SCANF_FORMAT_STRING
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1127 #define SDL_PRINTF_VARARG_FUNC( fmtargnumber )
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1128 #define SDL_PRINTF_VARARG_FUNCV( fmtargnumber )
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1129 #define SDL_SCANF_VARARG_FUNC( fmtargnumber )
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1130 #define SDL_SCANF_VARARG_FUNCV( fmtargnumber )
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1131 #define SDL_WPRINTF_VARARG_FUNC( fmtargnumber )
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1132 #define SDL_WPRINTF_VARARG_FUNCV( fmtargnumber )
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1133 #else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1134 #if defined(_MSC_VER) && (_MSC_VER >= 1600) /* VS 2010 and above */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1135 #include <sal.h>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1136
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1137 #define SDL_IN_BYTECAP(x) _In_bytecount_(x)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1138 #define SDL_INOUT_Z_CAP(x) _Inout_z_cap_(x)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1139 #define SDL_OUT_Z_CAP(x) _Out_z_cap_(x)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1140 #define SDL_OUT_CAP(x) _Out_cap_(x)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1141 #define SDL_OUT_BYTECAP(x) _Out_bytecap_(x)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1142 #define SDL_OUT_Z_BYTECAP(x) _Out_z_bytecap_(x)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1143
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1144 #define SDL_PRINTF_FORMAT_STRING _Printf_format_string_
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1145 #define SDL_SCANF_FORMAT_STRING _Scanf_format_string_impl_
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1146 #else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1147 #define SDL_IN_BYTECAP(x)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1148 #define SDL_INOUT_Z_CAP(x)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1149 #define SDL_OUT_Z_CAP(x)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1150 #define SDL_OUT_CAP(x)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1151 #define SDL_OUT_BYTECAP(x)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1152 #define SDL_OUT_Z_BYTECAP(x)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1153 #define SDL_PRINTF_FORMAT_STRING
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1154 #define SDL_SCANF_FORMAT_STRING
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1155 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1156 #if defined(__GNUC__) || defined(__clang__)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1157 #define SDL_PRINTF_VARARG_FUNC( fmtargnumber ) __attribute__ (( format( __printf__, fmtargnumber, fmtargnumber+1 )))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1158 #define SDL_PRINTF_VARARG_FUNCV( fmtargnumber ) __attribute__(( format( __printf__, fmtargnumber, 0 )))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1159 #define SDL_SCANF_VARARG_FUNC( fmtargnumber ) __attribute__ (( format( __scanf__, fmtargnumber, fmtargnumber+1 )))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1160 #define SDL_SCANF_VARARG_FUNCV( fmtargnumber ) __attribute__(( format( __scanf__, fmtargnumber, 0 )))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1161 #define SDL_WPRINTF_VARARG_FUNC( fmtargnumber ) /* __attribute__ (( format( __wprintf__, fmtargnumber, fmtargnumber+1 ))) */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1162 #define SDL_WPRINTF_VARARG_FUNCV( fmtargnumber ) /* __attribute__ (( format( __wprintf__, fmtargnumber, 0 ))) */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1163 #else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1164 #define SDL_PRINTF_VARARG_FUNC( fmtargnumber )
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1165 #define SDL_PRINTF_VARARG_FUNCV( fmtargnumber )
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1166 #define SDL_SCANF_VARARG_FUNC( fmtargnumber )
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1167 #define SDL_SCANF_VARARG_FUNCV( fmtargnumber )
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1168 #define SDL_WPRINTF_VARARG_FUNC( fmtargnumber )
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1169 #define SDL_WPRINTF_VARARG_FUNCV( fmtargnumber )
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1170 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1171 #endif /* SDL_DISABLE_ANALYZE_MACROS */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1172
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1173 /** \cond */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1174 #ifndef DOXYGEN_SHOULD_IGNORE_THIS
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1175 SDL_COMPILE_TIME_ASSERT(bool_size, sizeof(bool) == 1);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1176 SDL_COMPILE_TIME_ASSERT(uint8_size, sizeof(Uint8) == 1);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1177 SDL_COMPILE_TIME_ASSERT(sint8_size, sizeof(Sint8) == 1);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1178 SDL_COMPILE_TIME_ASSERT(uint16_size, sizeof(Uint16) == 2);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1179 SDL_COMPILE_TIME_ASSERT(sint16_size, sizeof(Sint16) == 2);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1180 SDL_COMPILE_TIME_ASSERT(uint32_size, sizeof(Uint32) == 4);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1181 SDL_COMPILE_TIME_ASSERT(sint32_size, sizeof(Sint32) == 4);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1182 SDL_COMPILE_TIME_ASSERT(uint64_size, sizeof(Uint64) == 8);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1183 SDL_COMPILE_TIME_ASSERT(sint64_size, sizeof(Sint64) == 8);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1184 #ifndef SDL_NOLONGLONG
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1185 SDL_COMPILE_TIME_ASSERT(uint64_longlong, sizeof(Uint64) <= sizeof(unsigned long long));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1186 SDL_COMPILE_TIME_ASSERT(size_t_longlong, sizeof(size_t) <= sizeof(unsigned long long));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1187 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1188 typedef struct SDL_alignment_test
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1189 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1190 Uint8 a;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1191 void *b;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1192 } SDL_alignment_test;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1193 SDL_COMPILE_TIME_ASSERT(struct_alignment, sizeof(SDL_alignment_test) == (2 * sizeof(void *)));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1194 SDL_COMPILE_TIME_ASSERT(two_s_complement, SDL_static_cast(int, ~SDL_static_cast(int, 0)) == SDL_static_cast(int, -1));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1195 #endif /* DOXYGEN_SHOULD_IGNORE_THIS */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1196 /** \endcond */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1197
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1198 /* Check to make sure enums are the size of ints, for structure packing.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1199 For both Watcom C/C++ and Borland C/C++ the compiler option that makes
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1200 enums having the size of an int must be enabled.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1201 This is "-b" for Borland C/C++ and "-ei" for Watcom C/C++ (v11).
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1202 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1203
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1204 /** \cond */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1205 #ifndef DOXYGEN_SHOULD_IGNORE_THIS
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1206 #if !defined(SDL_PLATFORM_VITA) && !defined(SDL_PLATFORM_3DS)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1207 /* TODO: include/SDL_stdinc.h:390: error: size of array 'SDL_dummy_enum' is negative */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1208 typedef enum SDL_DUMMY_ENUM
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1209 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1210 DUMMY_ENUM_VALUE
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1211 } SDL_DUMMY_ENUM;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1212
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1213 SDL_COMPILE_TIME_ASSERT(enum, sizeof(SDL_DUMMY_ENUM) == sizeof(int));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1214 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1215 #endif /* DOXYGEN_SHOULD_IGNORE_THIS */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1216 /** \endcond */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1217
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1218 #include <SDL3/SDL_begin_code.h>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1219 /* Set up for C function definitions, even when using C++ */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1220 #ifdef __cplusplus
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1221 extern "C" {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1222 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1223
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1224 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1225 * A macro to initialize an SDL interface.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1226 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1227 * This macro will initialize an SDL interface structure and should be called
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1228 * before you fill out the fields with your implementation.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1229 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1230 * You can use it like this:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1231 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1232 * ```c
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1233 * SDL_IOStreamInterface iface;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1234 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1235 * SDL_INIT_INTERFACE(&iface);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1236 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1237 * // Fill in the interface function pointers with your implementation
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1238 * iface.seek = ...
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1239 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1240 * stream = SDL_OpenIO(&iface, NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1241 * ```
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1242 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1243 * If you are using designated initializers, you can use the size of the
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1244 * interface as the version, e.g.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1245 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1246 * ```c
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1247 * SDL_IOStreamInterface iface = {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1248 * .version = sizeof(iface),
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1249 * .seek = ...
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1250 * };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1251 * stream = SDL_OpenIO(&iface, NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1252 * ```
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1253 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1254 * \threadsafety It is safe to call this macro from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1255 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1256 * \since This macro is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1257 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1258 * \sa SDL_IOStreamInterface
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1259 * \sa SDL_StorageInterface
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1260 * \sa SDL_VirtualJoystickDesc
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1261 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1262 #define SDL_INIT_INTERFACE(iface) \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1263 do { \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1264 SDL_zerop(iface); \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1265 (iface)->version = sizeof(*(iface)); \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1266 } while (0)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1267
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1268
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1269 #ifdef SDL_WIKI_DOCUMENTATION_SECTION
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1270
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1271 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1272 * Allocate memory on the stack (maybe).
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1273 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1274 * If SDL knows how to access alloca() on the current platform, it will use it
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1275 * to stack-allocate memory here. If it doesn't, it will use SDL_malloc() to
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1276 * heap-allocate memory.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1277 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1278 * Since this might not be stack memory at all, it's important that you check
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1279 * the returned pointer for NULL, and that you call SDL_stack_free on the
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1280 * memory when done with it. Since this might be stack memory, it's important
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1281 * that you don't allocate large amounts of it, or allocate in a loop without
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1282 * returning from the function, so the stack doesn't overflow.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1283 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1284 * \param type the datatype of the memory to allocate.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1285 * \param count the number of `type` objects to allocate.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1286 * \returns newly-allocated memory, or NULL on failure.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1287 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1288 * \threadsafety It is safe to call this macro from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1289 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1290 * \since This macro is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1291 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1292 * \sa SDL_stack_free
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1293 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1294 #define SDL_stack_alloc(type, count) (type*)alloca(sizeof(type)*(count))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1295
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1296 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1297 * Free memory previously allocated with SDL_stack_alloc.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1298 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1299 * If SDL used alloca() to allocate this memory, this macro does nothing and
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1300 * the allocated memory will be automatically released when the function that
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1301 * called SDL_stack_alloc() returns. If SDL used SDL_malloc(), it will
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1302 * SDL_free the memory immediately.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1303 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1304 * \param data the pointer, from SDL_stack_alloc(), to free.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1305 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1306 * \threadsafety It is safe to call this macro from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1307 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1308 * \since This macro is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1309 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1310 * \sa SDL_stack_alloc
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1311 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1312 #define SDL_stack_free(data)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1313 #elif !defined(SDL_DISABLE_ALLOCA)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1314 #define SDL_stack_alloc(type, count) (type*)alloca(sizeof(type)*(count))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1315 #define SDL_stack_free(data)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1316 #else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1317 #define SDL_stack_alloc(type, count) (type*)SDL_malloc(sizeof(type)*(count))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1318 #define SDL_stack_free(data) SDL_free(data)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1319 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1320
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1321 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1322 * Allocate uninitialized memory.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1323 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1324 * The allocated memory returned by this function must be freed with
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1325 * SDL_free().
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1326 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1327 * If `size` is 0, it will be set to 1.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1328 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1329 * If the allocation is successful, the returned pointer is guaranteed to be
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1330 * aligned to either the *fundamental alignment* (`alignof(max_align_t)` in
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1331 * C11 and later) or `2 * sizeof(void *)`, whichever is smaller. Use
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1332 * SDL_aligned_alloc() if you need to allocate memory aligned to an alignment
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1333 * greater than this guarantee.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1334 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1335 * \param size the size to allocate.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1336 * \returns a pointer to the allocated memory, or NULL if allocation failed.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1337 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1338 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1339 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1340 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1341 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1342 * \sa SDL_free
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1343 * \sa SDL_calloc
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1344 * \sa SDL_realloc
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1345 * \sa SDL_aligned_alloc
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1346 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1347 extern SDL_DECLSPEC SDL_MALLOC void * SDLCALL SDL_malloc(size_t size);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1348
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1349 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1350 * Allocate a zero-initialized array.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1351 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1352 * The memory returned by this function must be freed with SDL_free().
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1353 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1354 * If either of `nmemb` or `size` is 0, they will both be set to 1.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1355 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1356 * If the allocation is successful, the returned pointer is guaranteed to be
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1357 * aligned to either the *fundamental alignment* (`alignof(max_align_t)` in
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1358 * C11 and later) or `2 * sizeof(void *)`, whichever is smaller.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1359 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1360 * \param nmemb the number of elements in the array.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1361 * \param size the size of each element of the array.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1362 * \returns a pointer to the allocated array, or NULL if allocation failed.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1363 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1364 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1365 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1366 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1367 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1368 * \sa SDL_free
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1369 * \sa SDL_malloc
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1370 * \sa SDL_realloc
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1371 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1372 extern SDL_DECLSPEC SDL_MALLOC SDL_ALLOC_SIZE2(1, 2) void * SDLCALL SDL_calloc(size_t nmemb, size_t size);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1373
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1374 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1375 * Change the size of allocated memory.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1376 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1377 * The memory returned by this function must be freed with SDL_free().
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1378 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1379 * If `size` is 0, it will be set to 1. Note that this is unlike some other C
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1380 * runtime `realloc` implementations, which may treat `realloc(mem, 0)` the
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1381 * same way as `free(mem)`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1382 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1383 * If `mem` is NULL, the behavior of this function is equivalent to
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1384 * SDL_malloc(). Otherwise, the function can have one of three possible
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1385 * outcomes:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1386 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1387 * - If it returns the same pointer as `mem`, it means that `mem` was resized
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1388 * in place without freeing.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1389 * - If it returns a different non-NULL pointer, it means that `mem` was freed
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1390 * and cannot be dereferenced anymore.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1391 * - If it returns NULL (indicating failure), then `mem` will remain valid and
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1392 * must still be freed with SDL_free().
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1393 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1394 * If the allocation is successfully resized, the returned pointer is
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1395 * guaranteed to be aligned to either the *fundamental alignment*
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1396 * (`alignof(max_align_t)` in C11 and later) or `2 * sizeof(void *)`,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1397 * whichever is smaller.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1398 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1399 * \param mem a pointer to allocated memory to reallocate, or NULL.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1400 * \param size the new size of the memory.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1401 * \returns a pointer to the newly allocated memory, or NULL if allocation
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1402 * failed.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1403 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1404 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1405 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1406 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1407 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1408 * \sa SDL_free
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1409 * \sa SDL_malloc
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1410 * \sa SDL_calloc
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1411 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1412 extern SDL_DECLSPEC SDL_ALLOC_SIZE(2) void * SDLCALL SDL_realloc(void *mem, size_t size);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1413
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1414 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1415 * Free allocated memory.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1416 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1417 * The pointer is no longer valid after this call and cannot be dereferenced
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1418 * anymore.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1419 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1420 * If `mem` is NULL, this function does nothing.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1421 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1422 * \param mem a pointer to allocated memory, or NULL.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1423 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1424 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1425 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1426 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1427 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1428 * \sa SDL_malloc
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1429 * \sa SDL_calloc
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1430 * \sa SDL_realloc
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1431 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1432 extern SDL_DECLSPEC void SDLCALL SDL_free(void *mem);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1433
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1434 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1435 * A callback used to implement SDL_malloc().
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1436 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1437 * SDL will always ensure that the passed `size` is greater than 0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1438 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1439 * \param size the size to allocate.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1440 * \returns a pointer to the allocated memory, or NULL if allocation failed.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1441 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1442 * \threadsafety It should be safe to call this callback from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1443 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1444 * \since This datatype is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1445 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1446 * \sa SDL_malloc
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1447 * \sa SDL_GetOriginalMemoryFunctions
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1448 * \sa SDL_GetMemoryFunctions
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1449 * \sa SDL_SetMemoryFunctions
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1450 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1451 typedef void *(SDLCALL *SDL_malloc_func)(size_t size);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1452
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1453 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1454 * A callback used to implement SDL_calloc().
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1455 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1456 * SDL will always ensure that the passed `nmemb` and `size` are both greater
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1457 * than 0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1458 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1459 * \param nmemb the number of elements in the array.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1460 * \param size the size of each element of the array.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1461 * \returns a pointer to the allocated array, or NULL if allocation failed.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1462 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1463 * \threadsafety It should be safe to call this callback from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1464 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1465 * \since This datatype is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1466 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1467 * \sa SDL_calloc
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1468 * \sa SDL_GetOriginalMemoryFunctions
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1469 * \sa SDL_GetMemoryFunctions
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1470 * \sa SDL_SetMemoryFunctions
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1471 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1472 typedef void *(SDLCALL *SDL_calloc_func)(size_t nmemb, size_t size);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1473
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1474 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1475 * A callback used to implement SDL_realloc().
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1476 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1477 * SDL will always ensure that the passed `size` is greater than 0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1478 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1479 * \param mem a pointer to allocated memory to reallocate, or NULL.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1480 * \param size the new size of the memory.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1481 * \returns a pointer to the newly allocated memory, or NULL if allocation
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1482 * failed.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1483 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1484 * \threadsafety It should be safe to call this callback from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1485 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1486 * \since This datatype is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1487 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1488 * \sa SDL_realloc
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1489 * \sa SDL_GetOriginalMemoryFunctions
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1490 * \sa SDL_GetMemoryFunctions
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1491 * \sa SDL_SetMemoryFunctions
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1492 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1493 typedef void *(SDLCALL *SDL_realloc_func)(void *mem, size_t size);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1494
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1495 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1496 * A callback used to implement SDL_free().
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1497 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1498 * SDL will always ensure that the passed `mem` is a non-NULL pointer.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1499 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1500 * \param mem a pointer to allocated memory.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1501 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1502 * \threadsafety It should be safe to call this callback from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1503 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1504 * \since This datatype is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1505 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1506 * \sa SDL_free
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1507 * \sa SDL_GetOriginalMemoryFunctions
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1508 * \sa SDL_GetMemoryFunctions
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1509 * \sa SDL_SetMemoryFunctions
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1510 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1511 typedef void (SDLCALL *SDL_free_func)(void *mem);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1512
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1513 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1514 * Get the original set of SDL memory functions.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1515 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1516 * This is what SDL_malloc and friends will use by default, if there has been
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1517 * no call to SDL_SetMemoryFunctions. This is not necessarily using the C
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1518 * runtime's `malloc` functions behind the scenes! Different platforms and
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1519 * build configurations might do any number of unexpected things.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1520 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1521 * \param malloc_func filled with malloc function.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1522 * \param calloc_func filled with calloc function.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1523 * \param realloc_func filled with realloc function.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1524 * \param free_func filled with free function.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1525 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1526 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1527 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1528 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1529 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1530 extern SDL_DECLSPEC void SDLCALL SDL_GetOriginalMemoryFunctions(SDL_malloc_func *malloc_func,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1531 SDL_calloc_func *calloc_func,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1532 SDL_realloc_func *realloc_func,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1533 SDL_free_func *free_func);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1534
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1535 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1536 * Get the current set of SDL memory functions.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1537 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1538 * \param malloc_func filled with malloc function.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1539 * \param calloc_func filled with calloc function.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1540 * \param realloc_func filled with realloc function.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1541 * \param free_func filled with free function.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1542 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1543 * \threadsafety This does not hold a lock, so do not call this in the
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1544 * unlikely event of a background thread calling
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1545 * SDL_SetMemoryFunctions simultaneously.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1546 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1547 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1548 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1549 * \sa SDL_SetMemoryFunctions
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1550 * \sa SDL_GetOriginalMemoryFunctions
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1551 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1552 extern SDL_DECLSPEC void SDLCALL SDL_GetMemoryFunctions(SDL_malloc_func *malloc_func,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1553 SDL_calloc_func *calloc_func,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1554 SDL_realloc_func *realloc_func,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1555 SDL_free_func *free_func);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1556
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1557 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1558 * Replace SDL's memory allocation functions with a custom set.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1559 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1560 * It is not safe to call this function once any allocations have been made,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1561 * as future calls to SDL_free will use the new allocator, even if they came
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1562 * from an SDL_malloc made with the old one!
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1563 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1564 * If used, usually this needs to be the first call made into the SDL library,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1565 * if not the very first thing done at program startup time.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1566 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1567 * \param malloc_func custom malloc function.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1568 * \param calloc_func custom calloc function.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1569 * \param realloc_func custom realloc function.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1570 * \param free_func custom free function.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1571 * \returns true on success or false on failure; call SDL_GetError() for more
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1572 * information.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1573 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1574 * \threadsafety It is safe to call this function from any thread, but one
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1575 * should not replace the memory functions once any allocations
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1576 * are made!
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1577 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1578 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1579 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1580 * \sa SDL_GetMemoryFunctions
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1581 * \sa SDL_GetOriginalMemoryFunctions
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1582 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1583 extern SDL_DECLSPEC bool SDLCALL SDL_SetMemoryFunctions(SDL_malloc_func malloc_func,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1584 SDL_calloc_func calloc_func,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1585 SDL_realloc_func realloc_func,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1586 SDL_free_func free_func);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1587
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1588 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1589 * Allocate memory aligned to a specific alignment.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1590 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1591 * The memory returned by this function must be freed with SDL_aligned_free(),
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1592 * _not_ SDL_free().
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1593 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1594 * If `alignment` is less than the size of `void *`, it will be increased to
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1595 * match that.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1596 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1597 * The returned memory address will be a multiple of the alignment value, and
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1598 * the size of the memory allocated will be a multiple of the alignment value.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1599 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1600 * \param alignment the alignment of the memory.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1601 * \param size the size to allocate.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1602 * \returns a pointer to the aligned memory, or NULL if allocation failed.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1603 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1604 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1605 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1606 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1607 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1608 * \sa SDL_aligned_free
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1609 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1610 extern SDL_DECLSPEC SDL_MALLOC void * SDLCALL SDL_aligned_alloc(size_t alignment, size_t size);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1611
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1612 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1613 * Free memory allocated by SDL_aligned_alloc().
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1614 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1615 * The pointer is no longer valid after this call and cannot be dereferenced
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1616 * anymore.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1617 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1618 * If `mem` is NULL, this function does nothing.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1619 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1620 * \param mem a pointer previously returned by SDL_aligned_alloc(), or NULL.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1621 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1622 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1623 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1624 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1625 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1626 * \sa SDL_aligned_alloc
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1627 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1628 extern SDL_DECLSPEC void SDLCALL SDL_aligned_free(void *mem);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1629
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1630 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1631 * Get the number of outstanding (unfreed) allocations.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1632 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1633 * \returns the number of allocations or -1 if allocation counting is
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1634 * disabled.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1635 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1636 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1637 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1638 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1639 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1640 extern SDL_DECLSPEC int SDLCALL SDL_GetNumAllocations(void);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1641
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1642 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1643 * A thread-safe set of environment variables
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1644 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1645 * \since This struct is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1646 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1647 * \sa SDL_GetEnvironment
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1648 * \sa SDL_CreateEnvironment
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1649 * \sa SDL_GetEnvironmentVariable
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1650 * \sa SDL_GetEnvironmentVariables
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1651 * \sa SDL_SetEnvironmentVariable
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1652 * \sa SDL_UnsetEnvironmentVariable
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1653 * \sa SDL_DestroyEnvironment
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1654 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1655 typedef struct SDL_Environment SDL_Environment;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1656
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1657 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1658 * Get the process environment.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1659 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1660 * This is initialized at application start and is not affected by setenv()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1661 * and unsetenv() calls after that point. Use SDL_SetEnvironmentVariable() and
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1662 * SDL_UnsetEnvironmentVariable() if you want to modify this environment, or
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1663 * SDL_setenv_unsafe() or SDL_unsetenv_unsafe() if you want changes to persist
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1664 * in the C runtime environment after SDL_Quit().
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1665 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1666 * \returns a pointer to the environment for the process or NULL on failure;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1667 * call SDL_GetError() for more information.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1668 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1669 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1670 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1671 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1672 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1673 * \sa SDL_GetEnvironmentVariable
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1674 * \sa SDL_GetEnvironmentVariables
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1675 * \sa SDL_SetEnvironmentVariable
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1676 * \sa SDL_UnsetEnvironmentVariable
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1677 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1678 extern SDL_DECLSPEC SDL_Environment * SDLCALL SDL_GetEnvironment(void);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1679
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1680 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1681 * Create a set of environment variables
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1682 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1683 * \param populated true to initialize it from the C runtime environment,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1684 * false to create an empty environment.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1685 * \returns a pointer to the new environment or NULL on failure; call
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1686 * SDL_GetError() for more information.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1687 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1688 * \threadsafety If `populated` is false, it is safe to call this function
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1689 * from any thread, otherwise it is safe if no other threads are
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1690 * calling setenv() or unsetenv()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1691 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1692 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1693 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1694 * \sa SDL_GetEnvironmentVariable
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1695 * \sa SDL_GetEnvironmentVariables
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1696 * \sa SDL_SetEnvironmentVariable
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1697 * \sa SDL_UnsetEnvironmentVariable
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1698 * \sa SDL_DestroyEnvironment
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1699 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1700 extern SDL_DECLSPEC SDL_Environment * SDLCALL SDL_CreateEnvironment(bool populated);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1701
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1702 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1703 * Get the value of a variable in the environment.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1704 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1705 * \param env the environment to query.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1706 * \param name the name of the variable to get.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1707 * \returns a pointer to the value of the variable or NULL if it can't be
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1708 * found.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1709 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1710 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1711 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1712 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1713 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1714 * \sa SDL_GetEnvironment
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1715 * \sa SDL_CreateEnvironment
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1716 * \sa SDL_GetEnvironmentVariables
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1717 * \sa SDL_SetEnvironmentVariable
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1718 * \sa SDL_UnsetEnvironmentVariable
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1719 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1720 extern SDL_DECLSPEC const char * SDLCALL SDL_GetEnvironmentVariable(SDL_Environment *env, const char *name);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1721
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1722 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1723 * Get all variables in the environment.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1724 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1725 * \param env the environment to query.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1726 * \returns a NULL terminated array of pointers to environment variables in
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1727 * the form "variable=value" or NULL on failure; call SDL_GetError()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1728 * for more information. This is a single allocation that should be
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1729 * freed with SDL_free() when it is no longer needed.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1730 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1731 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1732 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1733 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1734 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1735 * \sa SDL_GetEnvironment
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1736 * \sa SDL_CreateEnvironment
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1737 * \sa SDL_GetEnvironmentVariables
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1738 * \sa SDL_SetEnvironmentVariable
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1739 * \sa SDL_UnsetEnvironmentVariable
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1740 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1741 extern SDL_DECLSPEC char ** SDLCALL SDL_GetEnvironmentVariables(SDL_Environment *env);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1742
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1743 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1744 * Set the value of a variable in the environment.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1745 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1746 * \param env the environment to modify.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1747 * \param name the name of the variable to set.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1748 * \param value the value of the variable to set.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1749 * \param overwrite true to overwrite the variable if it exists, false to
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1750 * return success without setting the variable if it already
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1751 * exists.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1752 * \returns true on success or false on failure; call SDL_GetError() for more
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1753 * information.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1754 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1755 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1756 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1757 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1758 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1759 * \sa SDL_GetEnvironment
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1760 * \sa SDL_CreateEnvironment
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1761 * \sa SDL_GetEnvironmentVariable
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1762 * \sa SDL_GetEnvironmentVariables
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1763 * \sa SDL_UnsetEnvironmentVariable
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1764 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1765 extern SDL_DECLSPEC bool SDLCALL SDL_SetEnvironmentVariable(SDL_Environment *env, const char *name, const char *value, bool overwrite);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1766
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1767 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1768 * Clear a variable from the environment.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1769 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1770 * \param env the environment to modify.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1771 * \param name the name of the variable to unset.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1772 * \returns true on success or false on failure; call SDL_GetError() for more
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1773 * information.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1774 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1775 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1776 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1777 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1778 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1779 * \sa SDL_GetEnvironment
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1780 * \sa SDL_CreateEnvironment
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1781 * \sa SDL_GetEnvironmentVariable
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1782 * \sa SDL_GetEnvironmentVariables
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1783 * \sa SDL_SetEnvironmentVariable
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1784 * \sa SDL_UnsetEnvironmentVariable
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1785 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1786 extern SDL_DECLSPEC bool SDLCALL SDL_UnsetEnvironmentVariable(SDL_Environment *env, const char *name);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1787
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1788 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1789 * Destroy a set of environment variables.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1790 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1791 * \param env the environment to destroy.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1792 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1793 * \threadsafety It is safe to call this function from any thread, as long as
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1794 * the environment is no longer in use.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1795 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1796 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1797 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1798 * \sa SDL_CreateEnvironment
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1799 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1800 extern SDL_DECLSPEC void SDLCALL SDL_DestroyEnvironment(SDL_Environment *env);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1801
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1802 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1803 * Get the value of a variable in the environment.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1804 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1805 * This function uses SDL's cached copy of the environment and is thread-safe.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1806 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1807 * \param name the name of the variable to get.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1808 * \returns a pointer to the value of the variable or NULL if it can't be
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1809 * found.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1810 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1811 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1812 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1813 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1814 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1815 extern SDL_DECLSPEC const char * SDLCALL SDL_getenv(const char *name);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1816
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1817 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1818 * Get the value of a variable in the environment.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1819 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1820 * This function bypasses SDL's cached copy of the environment and is not
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1821 * thread-safe.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1822 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1823 * \param name the name of the variable to get.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1824 * \returns a pointer to the value of the variable or NULL if it can't be
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1825 * found.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1826 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1827 * \threadsafety This function is not thread safe, consider using SDL_getenv()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1828 * instead.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1829 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1830 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1831 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1832 * \sa SDL_getenv
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1833 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1834 extern SDL_DECLSPEC const char * SDLCALL SDL_getenv_unsafe(const char *name);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1835
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1836 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1837 * Set the value of a variable in the environment.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1838 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1839 * \param name the name of the variable to set.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1840 * \param value the value of the variable to set.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1841 * \param overwrite 1 to overwrite the variable if it exists, 0 to return
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1842 * success without setting the variable if it already exists.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1843 * \returns 0 on success, -1 on error.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1844 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1845 * \threadsafety This function is not thread safe, consider using
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1846 * SDL_SetEnvironmentVariable() instead.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1847 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1848 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1849 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1850 * \sa SDL_SetEnvironmentVariable
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1851 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1852 extern SDL_DECLSPEC int SDLCALL SDL_setenv_unsafe(const char *name, const char *value, int overwrite);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1853
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1854 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1855 * Clear a variable from the environment.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1856 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1857 * \param name the name of the variable to unset.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1858 * \returns 0 on success, -1 on error.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1859 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1860 * \threadsafety This function is not thread safe, consider using
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1861 * SDL_UnsetEnvironmentVariable() instead.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1862 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1863 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1864 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1865 * \sa SDL_UnsetEnvironmentVariable
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1866 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1867 extern SDL_DECLSPEC int SDLCALL SDL_unsetenv_unsafe(const char *name);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1868
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1869 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1870 * A callback used with SDL sorting and binary search functions.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1871 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1872 * \param a a pointer to the first element being compared.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1873 * \param b a pointer to the second element being compared.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1874 * \returns -1 if `a` should be sorted before `b`, 1 if `b` should be sorted
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1875 * before `a`, 0 if they are equal. If two elements are equal, their
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1876 * order in the sorted array is undefined.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1877 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1878 * \since This callback is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1879 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1880 * \sa SDL_bsearch
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1881 * \sa SDL_qsort
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1882 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1883 typedef int (SDLCALL *SDL_CompareCallback)(const void *a, const void *b);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1884
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1885 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1886 * Sort an array.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1887 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1888 * For example:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1889 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1890 * ```c
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1891 * typedef struct {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1892 * int key;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1893 * const char *string;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1894 * } data;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1895 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1896 * int SDLCALL compare(const void *a, const void *b)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1897 * {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1898 * const data *A = (const data *)a;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1899 * const data *B = (const data *)b;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1900 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1901 * if (A->n < B->n) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1902 * return -1;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1903 * } else if (B->n < A->n) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1904 * return 1;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1905 * } else {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1906 * return 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1907 * }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1908 * }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1909 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1910 * data values[] = {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1911 * { 3, "third" }, { 1, "first" }, { 2, "second" }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1912 * };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1913 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1914 * SDL_qsort(values, SDL_arraysize(values), sizeof(values[0]), compare);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1915 * ```
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1916 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1917 * \param base a pointer to the start of the array.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1918 * \param nmemb the number of elements in the array.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1919 * \param size the size of the elements in the array.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1920 * \param compare a function used to compare elements in the array.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1921 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1922 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1923 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1924 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1925 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1926 * \sa SDL_bsearch
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1927 * \sa SDL_qsort_r
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1928 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1929 extern SDL_DECLSPEC void SDLCALL SDL_qsort(void *base, size_t nmemb, size_t size, SDL_CompareCallback compare);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1930
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1931 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1932 * Perform a binary search on a previously sorted array.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1933 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1934 * For example:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1935 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1936 * ```c
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1937 * typedef struct {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1938 * int key;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1939 * const char *string;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1940 * } data;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1941 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1942 * int SDLCALL compare(const void *a, const void *b)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1943 * {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1944 * const data *A = (const data *)a;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1945 * const data *B = (const data *)b;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1946 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1947 * if (A->n < B->n) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1948 * return -1;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1949 * } else if (B->n < A->n) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1950 * return 1;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1951 * } else {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1952 * return 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1953 * }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1954 * }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1955 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1956 * data values[] = {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1957 * { 1, "first" }, { 2, "second" }, { 3, "third" }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1958 * };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1959 * data key = { 2, NULL };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1960 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1961 * data *result = SDL_bsearch(&key, values, SDL_arraysize(values), sizeof(values[0]), compare);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1962 * ```
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1963 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1964 * \param key a pointer to a key equal to the element being searched for.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1965 * \param base a pointer to the start of the array.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1966 * \param nmemb the number of elements in the array.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1967 * \param size the size of the elements in the array.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1968 * \param compare a function used to compare elements in the array.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1969 * \returns a pointer to the matching element in the array, or NULL if not
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1970 * found.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1971 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1972 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1973 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1974 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1975 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1976 * \sa SDL_bsearch_r
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1977 * \sa SDL_qsort
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1978 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1979 extern SDL_DECLSPEC void * SDLCALL SDL_bsearch(const void *key, const void *base, size_t nmemb, size_t size, SDL_CompareCallback compare);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1980
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1981 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1982 * A callback used with SDL sorting and binary search functions.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1983 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1984 * \param userdata the `userdata` pointer passed to the sort function.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1985 * \param a a pointer to the first element being compared.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1986 * \param b a pointer to the second element being compared.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1987 * \returns -1 if `a` should be sorted before `b`, 1 if `b` should be sorted
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1988 * before `a`, 0 if they are equal. If two elements are equal, their
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1989 * order in the sorted array is undefined.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1990 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1991 * \since This callback is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1992 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1993 * \sa SDL_qsort_r
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1994 * \sa SDL_bsearch_r
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1995 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1996 typedef int (SDLCALL *SDL_CompareCallback_r)(void *userdata, const void *a, const void *b);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1997
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1998 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1999 * Sort an array, passing a userdata pointer to the compare function.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2000 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2001 * For example:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2002 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2003 * ```c
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2004 * typedef enum {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2005 * sort_increasing,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2006 * sort_decreasing,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2007 * } sort_method;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2008 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2009 * typedef struct {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2010 * int key;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2011 * const char *string;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2012 * } data;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2013 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2014 * int SDLCALL compare(const void *userdata, const void *a, const void *b)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2015 * {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2016 * sort_method method = (sort_method)(uintptr_t)userdata;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2017 * const data *A = (const data *)a;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2018 * const data *B = (const data *)b;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2019 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2020 * if (A->key < B->key) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2021 * return (method == sort_increasing) ? -1 : 1;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2022 * } else if (B->key < A->key) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2023 * return (method == sort_increasing) ? 1 : -1;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2024 * } else {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2025 * return 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2026 * }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2027 * }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2028 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2029 * data values[] = {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2030 * { 3, "third" }, { 1, "first" }, { 2, "second" }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2031 * };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2032 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2033 * SDL_qsort_r(values, SDL_arraysize(values), sizeof(values[0]), compare, (const void *)(uintptr_t)sort_increasing);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2034 * ```
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2035 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2036 * \param base a pointer to the start of the array.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2037 * \param nmemb the number of elements in the array.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2038 * \param size the size of the elements in the array.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2039 * \param compare a function used to compare elements in the array.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2040 * \param userdata a pointer to pass to the compare function.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2041 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2042 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2043 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2044 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2045 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2046 * \sa SDL_bsearch_r
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2047 * \sa SDL_qsort
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2048 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2049 extern SDL_DECLSPEC void SDLCALL SDL_qsort_r(void *base, size_t nmemb, size_t size, SDL_CompareCallback_r compare, void *userdata);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2050
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2051 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2052 * Perform a binary search on a previously sorted array, passing a userdata
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2053 * pointer to the compare function.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2054 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2055 * For example:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2056 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2057 * ```c
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2058 * typedef enum {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2059 * sort_increasing,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2060 * sort_decreasing,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2061 * } sort_method;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2062 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2063 * typedef struct {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2064 * int key;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2065 * const char *string;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2066 * } data;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2067 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2068 * int SDLCALL compare(const void *userdata, const void *a, const void *b)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2069 * {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2070 * sort_method method = (sort_method)(uintptr_t)userdata;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2071 * const data *A = (const data *)a;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2072 * const data *B = (const data *)b;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2073 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2074 * if (A->key < B->key) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2075 * return (method == sort_increasing) ? -1 : 1;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2076 * } else if (B->key < A->key) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2077 * return (method == sort_increasing) ? 1 : -1;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2078 * } else {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2079 * return 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2080 * }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2081 * }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2082 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2083 * data values[] = {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2084 * { 1, "first" }, { 2, "second" }, { 3, "third" }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2085 * };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2086 * data key = { 2, NULL };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2087 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2088 * data *result = SDL_bsearch_r(&key, values, SDL_arraysize(values), sizeof(values[0]), compare, (const void *)(uintptr_t)sort_increasing);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2089 * ```
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2090 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2091 * \param key a pointer to a key equal to the element being searched for.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2092 * \param base a pointer to the start of the array.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2093 * \param nmemb the number of elements in the array.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2094 * \param size the size of the elements in the array.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2095 * \param compare a function used to compare elements in the array.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2096 * \param userdata a pointer to pass to the compare function.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2097 * \returns a pointer to the matching element in the array, or NULL if not
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2098 * found.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2099 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2100 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2101 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2102 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2103 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2104 * \sa SDL_bsearch
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2105 * \sa SDL_qsort_r
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2106 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2107 extern SDL_DECLSPEC void * SDLCALL SDL_bsearch_r(const void *key, const void *base, size_t nmemb, size_t size, SDL_CompareCallback_r compare, void *userdata);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2108
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2109 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2110 * Compute the absolute value of `x`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2111 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2112 * \param x an integer value.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2113 * \returns the absolute value of x.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2114 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2115 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2116 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2117 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2118 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2119 extern SDL_DECLSPEC int SDLCALL SDL_abs(int x);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2120
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2121 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2122 * Return the lesser of two values.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2123 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2124 * This is a helper macro that might be more clear than writing out the
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2125 * comparisons directly, and works with any type that can be compared with the
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2126 * `<` operator. However, it double-evaluates both its parameters, so do not
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2127 * use expressions with side-effects here.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2128 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2129 * \param x the first value to compare.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2130 * \param y the second value to compare.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2131 * \returns the lesser of `x` and `y`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2132 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2133 * \threadsafety It is safe to call this macro from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2134 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2135 * \since This macro is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2136 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2137 #define SDL_min(x, y) (((x) < (y)) ? (x) : (y))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2138
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2139 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2140 * Return the greater of two values.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2141 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2142 * This is a helper macro that might be more clear than writing out the
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2143 * comparisons directly, and works with any type that can be compared with the
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2144 * `>` operator. However, it double-evaluates both its parameters, so do not
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2145 * use expressions with side-effects here.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2146 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2147 * \param x the first value to compare.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2148 * \param y the second value to compare.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2149 * \returns the greater of `x` and `y`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2150 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2151 * \threadsafety It is safe to call this macro from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2152 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2153 * \since This macro is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2154 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2155 #define SDL_max(x, y) (((x) > (y)) ? (x) : (y))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2156
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2157 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2158 * Return a value clamped to a range.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2159 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2160 * If `x` is outside the range a values between `a` and `b`, the returned
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2161 * value will be `a` or `b` as appropriate. Otherwise, `x` is returned.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2162 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2163 * This macro will produce incorrect results if `b` is less than `a`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2164 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2165 * This is a helper macro that might be more clear than writing out the
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2166 * comparisons directly, and works with any type that can be compared with the
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2167 * `<` and `>` operators. However, it double-evaluates all its parameters, so
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2168 * do not use expressions with side-effects here.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2169 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2170 * \param x the value to compare.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2171 * \param a the low end value.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2172 * \param b the high end value.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2173 * \returns x, clamped between a and b.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2174 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2175 * \threadsafety It is safe to call this macro from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2176 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2177 * \since This macro is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2178 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2179 #define SDL_clamp(x, a, b) (((x) < (a)) ? (a) : (((x) > (b)) ? (b) : (x)))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2180
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2181 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2182 * Query if a character is alphabetic (a letter).
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2183 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2184 * **WARNING**: Regardless of system locale, this will only treat ASCII values
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2185 * for English 'a-z' and 'A-Z' as true.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2186 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2187 * \param x character value to check.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2188 * \returns non-zero if x falls within the character class, zero otherwise.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2189 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2190 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2191 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2192 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2193 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2194 extern SDL_DECLSPEC int SDLCALL SDL_isalpha(int x);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2195
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2196 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2197 * Query if a character is alphabetic (a letter) or a number.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2198 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2199 * **WARNING**: Regardless of system locale, this will only treat ASCII values
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2200 * for English 'a-z', 'A-Z', and '0-9' as true.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2201 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2202 * \param x character value to check.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2203 * \returns non-zero if x falls within the character class, zero otherwise.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2204 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2205 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2206 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2207 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2208 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2209 extern SDL_DECLSPEC int SDLCALL SDL_isalnum(int x);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2210
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2211 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2212 * Report if a character is blank (a space or tab).
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2213 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2214 * **WARNING**: Regardless of system locale, this will only treat ASCII values
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2215 * 0x20 (space) or 0x9 (tab) as true.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2216 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2217 * \param x character value to check.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2218 * \returns non-zero if x falls within the character class, zero otherwise.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2219 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2220 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2221 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2222 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2223 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2224 extern SDL_DECLSPEC int SDLCALL SDL_isblank(int x);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2225
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2226 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2227 * Report if a character is a control character.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2228 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2229 * **WARNING**: Regardless of system locale, this will only treat ASCII values
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2230 * 0 through 0x1F, and 0x7F, as true.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2231 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2232 * \param x character value to check.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2233 * \returns non-zero if x falls within the character class, zero otherwise.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2234 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2235 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2236 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2237 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2238 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2239 extern SDL_DECLSPEC int SDLCALL SDL_iscntrl(int x);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2240
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2241 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2242 * Report if a character is a numeric digit.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2243 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2244 * **WARNING**: Regardless of system locale, this will only treat ASCII values
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2245 * '0' (0x30) through '9' (0x39), as true.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2246 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2247 * \param x character value to check.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2248 * \returns non-zero if x falls within the character class, zero otherwise.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2249 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2250 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2251 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2252 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2253 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2254 extern SDL_DECLSPEC int SDLCALL SDL_isdigit(int x);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2255
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2256 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2257 * Report if a character is a hexadecimal digit.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2258 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2259 * **WARNING**: Regardless of system locale, this will only treat ASCII values
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2260 * 'A' through 'F', 'a' through 'f', and '0' through '9', as true.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2261 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2262 * \param x character value to check.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2263 * \returns non-zero if x falls within the character class, zero otherwise.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2264 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2265 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2266 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2267 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2268 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2269 extern SDL_DECLSPEC int SDLCALL SDL_isxdigit(int x);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2270
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2271 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2272 * Report if a character is a punctuation mark.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2273 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2274 * **WARNING**: Regardless of system locale, this is equivalent to
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2275 * `((SDL_isgraph(x)) && (!SDL_isalnum(x)))`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2276 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2277 * \param x character value to check.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2278 * \returns non-zero if x falls within the character class, zero otherwise.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2279 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2280 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2281 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2282 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2283 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2284 * \sa SDL_isgraph
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2285 * \sa SDL_isalnum
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2286 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2287 extern SDL_DECLSPEC int SDLCALL SDL_ispunct(int x);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2288
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2289 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2290 * Report if a character is whitespace.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2291 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2292 * **WARNING**: Regardless of system locale, this will only treat the
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2293 * following ASCII values as true:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2294 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2295 * - space (0x20)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2296 * - tab (0x09)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2297 * - newline (0x0A)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2298 * - vertical tab (0x0B)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2299 * - form feed (0x0C)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2300 * - return (0x0D)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2301 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2302 * \param x character value to check.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2303 * \returns non-zero if x falls within the character class, zero otherwise.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2304 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2305 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2306 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2307 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2308 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2309 extern SDL_DECLSPEC int SDLCALL SDL_isspace(int x);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2310
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2311 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2312 * Report if a character is upper case.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2313 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2314 * **WARNING**: Regardless of system locale, this will only treat ASCII values
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2315 * 'A' through 'Z' as true.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2316 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2317 * \param x character value to check.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2318 * \returns non-zero if x falls within the character class, zero otherwise.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2319 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2320 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2321 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2322 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2323 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2324 extern SDL_DECLSPEC int SDLCALL SDL_isupper(int x);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2325
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2326 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2327 * Report if a character is lower case.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2328 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2329 * **WARNING**: Regardless of system locale, this will only treat ASCII values
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2330 * 'a' through 'z' as true.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2331 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2332 * \param x character value to check.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2333 * \returns non-zero if x falls within the character class, zero otherwise.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2334 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2335 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2336 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2337 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2338 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2339 extern SDL_DECLSPEC int SDLCALL SDL_islower(int x);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2340
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2341 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2342 * Report if a character is "printable".
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2343 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2344 * Be advised that "printable" has a definition that goes back to text
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2345 * terminals from the dawn of computing, making this a sort of special case
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2346 * function that is not suitable for Unicode (or most any) text management.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2347 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2348 * **WARNING**: Regardless of system locale, this will only treat ASCII values
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2349 * ' ' (0x20) through '~' (0x7E) as true.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2350 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2351 * \param x character value to check.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2352 * \returns non-zero if x falls within the character class, zero otherwise.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2353 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2354 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2355 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2356 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2357 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2358 extern SDL_DECLSPEC int SDLCALL SDL_isprint(int x);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2359
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2360 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2361 * Report if a character is any "printable" except space.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2362 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2363 * Be advised that "printable" has a definition that goes back to text
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2364 * terminals from the dawn of computing, making this a sort of special case
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2365 * function that is not suitable for Unicode (or most any) text management.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2366 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2367 * **WARNING**: Regardless of system locale, this is equivalent to
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2368 * `(SDL_isprint(x)) && ((x) != ' ')`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2369 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2370 * \param x character value to check.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2371 * \returns non-zero if x falls within the character class, zero otherwise.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2372 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2373 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2374 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2375 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2376 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2377 * \sa SDL_isprint
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2378 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2379 extern SDL_DECLSPEC int SDLCALL SDL_isgraph(int x);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2380
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2381 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2382 * Convert low-ASCII English letters to uppercase.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2383 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2384 * **WARNING**: Regardless of system locale, this will only convert ASCII
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2385 * values 'a' through 'z' to uppercase.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2386 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2387 * This function returns the uppercase equivalent of `x`. If a character
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2388 * cannot be converted, or is already uppercase, this function returns `x`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2389 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2390 * \param x character value to check.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2391 * \returns capitalized version of x, or x if no conversion available.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2392 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2393 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2394 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2395 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2396 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2397 extern SDL_DECLSPEC int SDLCALL SDL_toupper(int x);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2398
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2399 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2400 * Convert low-ASCII English letters to lowercase.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2401 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2402 * **WARNING**: Regardless of system locale, this will only convert ASCII
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2403 * values 'A' through 'Z' to lowercase.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2404 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2405 * This function returns the lowercase equivalent of `x`. If a character
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2406 * cannot be converted, or is already lowercase, this function returns `x`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2407 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2408 * \param x character value to check.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2409 * \returns lowercase version of x, or x if no conversion available.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2410 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2411 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2412 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2413 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2414 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2415 extern SDL_DECLSPEC int SDLCALL SDL_tolower(int x);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2416
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2417 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2418 * Calculate a CRC-16 value.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2419 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2420 * https://en.wikipedia.org/wiki/Cyclic_redundancy_check
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2421 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2422 * This function can be called multiple times, to stream data to be
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2423 * checksummed in blocks. Each call must provide the previous CRC-16 return
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2424 * value to be updated with the next block. The first call to this function
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2425 * for a set of blocks should pass in a zero CRC value.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2426 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2427 * \param crc the current checksum for this data set, or 0 for a new data set.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2428 * \param data a new block of data to add to the checksum.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2429 * \param len the size, in bytes, of the new block of data.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2430 * \returns a CRC-16 checksum value of all blocks in the data set.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2431 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2432 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2433 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2434 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2435 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2436 extern SDL_DECLSPEC Uint16 SDLCALL SDL_crc16(Uint16 crc, const void *data, size_t len);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2437
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2438 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2439 * Calculate a CRC-32 value.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2440 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2441 * https://en.wikipedia.org/wiki/Cyclic_redundancy_check
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2442 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2443 * This function can be called multiple times, to stream data to be
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2444 * checksummed in blocks. Each call must provide the previous CRC-32 return
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2445 * value to be updated with the next block. The first call to this function
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2446 * for a set of blocks should pass in a zero CRC value.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2447 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2448 * \param crc the current checksum for this data set, or 0 for a new data set.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2449 * \param data a new block of data to add to the checksum.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2450 * \param len the size, in bytes, of the new block of data.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2451 * \returns a CRC-32 checksum value of all blocks in the data set.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2452 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2453 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2454 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2455 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2456 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2457 extern SDL_DECLSPEC Uint32 SDLCALL SDL_crc32(Uint32 crc, const void *data, size_t len);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2458
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2459 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2460 * Calculate a 32-bit MurmurHash3 value for a block of data.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2461 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2462 * https://en.wikipedia.org/wiki/MurmurHash
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2463 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2464 * A seed may be specified, which changes the final results consistently, but
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2465 * this does not work like SDL_crc16 and SDL_crc32: you can't feed a previous
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2466 * result from this function back into itself as the next seed value to
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2467 * calculate a hash in chunks; it won't produce the same hash as it would if
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2468 * the same data was provided in a single call.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2469 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2470 * If you aren't sure what to provide for a seed, zero is fine. Murmur3 is not
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2471 * cryptographically secure, so it shouldn't be used for hashing top-secret
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2472 * data.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2473 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2474 * \param data the data to be hashed.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2475 * \param len the size of data, in bytes.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2476 * \param seed a value that alters the final hash value.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2477 * \returns a Murmur3 32-bit hash value.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2478 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2479 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2480 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2481 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2482 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2483 extern SDL_DECLSPEC Uint32 SDLCALL SDL_murmur3_32(const void *data, size_t len, Uint32 seed);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2484
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2485 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2486 * Copy non-overlapping memory.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2487 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2488 * The memory regions must not overlap. If they do, use SDL_memmove() instead.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2489 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2490 * \param dst The destination memory region. Must not be NULL, and must not
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2491 * overlap with `src`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2492 * \param src The source memory region. Must not be NULL, and must not overlap
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2493 * with `dst`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2494 * \param len The length in bytes of both `dst` and `src`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2495 * \returns `dst`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2496 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2497 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2498 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2499 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2500 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2501 * \sa SDL_memmove
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2502 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2503 extern SDL_DECLSPEC void * SDLCALL SDL_memcpy(SDL_OUT_BYTECAP(len) void *dst, SDL_IN_BYTECAP(len) const void *src, size_t len);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2504
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2505 /* Take advantage of compiler optimizations for memcpy */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2506 #ifndef SDL_SLOW_MEMCPY
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2507 #ifdef SDL_memcpy
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2508 #undef SDL_memcpy
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2509 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2510 #define SDL_memcpy memcpy
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2511 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2512
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2513
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2514 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2515 * A macro to copy memory between objects, with basic type checking.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2516 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2517 * SDL_memcpy and SDL_memmove do not care where you copy memory to and from,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2518 * which can lead to bugs. This macro aims to avoid most of those bugs by
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2519 * making sure that the source and destination are both pointers to objects
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2520 * that are the same size. It does not check that the objects are the same
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2521 * _type_, just that the copy will not overflow either object.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2522 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2523 * The size check happens at compile time, and the compiler will throw an
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2524 * error if the objects are different sizes.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2525 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2526 * Generally this is intended to copy a single object, not an array.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2527 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2528 * This macro looks like it double-evaluates its parameters, but the extras
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2529 * them are in `sizeof` sections, which generate no code nor side-effects.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2530 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2531 * \param dst a pointer to the destination object. Must not be NULL.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2532 * \param src a pointer to the source object. Must not be NULL.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2533 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2534 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2535 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2536 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2537 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2538 #define SDL_copyp(dst, src) \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2539 { SDL_COMPILE_TIME_ASSERT(SDL_copyp, sizeof (*(dst)) == sizeof (*(src))); } \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2540 SDL_memcpy((dst), (src), sizeof(*(src)))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2541
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2542 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2543 * Copy memory ranges that might overlap.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2544 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2545 * It is okay for the memory regions to overlap. If you are confident that the
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2546 * regions never overlap, using SDL_memcpy() may improve performance.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2547 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2548 * \param dst The destination memory region. Must not be NULL.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2549 * \param src The source memory region. Must not be NULL.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2550 * \param len The length in bytes of both `dst` and `src`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2551 * \returns `dst`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2552 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2553 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2554 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2555 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2556 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2557 * \sa SDL_memcpy
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2558 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2559 extern SDL_DECLSPEC void * SDLCALL SDL_memmove(SDL_OUT_BYTECAP(len) void *dst, SDL_IN_BYTECAP(len) const void *src, size_t len);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2560
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2561 /* Take advantage of compiler optimizations for memmove */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2562 #ifndef SDL_SLOW_MEMMOVE
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2563 #ifdef SDL_memmove
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2564 #undef SDL_memmove
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2565 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2566 #define SDL_memmove memmove
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2567 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2568
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2569 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2570 * Initialize all bytes of buffer of memory to a specific value.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2571 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2572 * This function will set `len` bytes, pointed to by `dst`, to the value
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2573 * specified in `c`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2574 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2575 * Despite `c` being an `int` instead of a `char`, this only operates on
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2576 * bytes; `c` must be a value between 0 and 255, inclusive.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2577 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2578 * \param dst the destination memory region. Must not be NULL.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2579 * \param c the byte value to set.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2580 * \param len the length, in bytes, to set in `dst`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2581 * \returns `dst`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2582 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2583 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2584 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2585 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2586 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2587 extern SDL_DECLSPEC void * SDLCALL SDL_memset(SDL_OUT_BYTECAP(len) void *dst, int c, size_t len);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2588
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2589 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2590 * Initialize all 32-bit words of buffer of memory to a specific value.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2591 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2592 * This function will set a buffer of `dwords` Uint32 values, pointed to by
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2593 * `dst`, to the value specified in `val`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2594 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2595 * Unlike SDL_memset, this sets 32-bit values, not bytes, so it's not limited
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2596 * to a range of 0-255.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2597 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2598 * \param dst the destination memory region. Must not be NULL.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2599 * \param val the Uint32 value to set.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2600 * \param dwords the number of Uint32 values to set in `dst`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2601 * \returns `dst`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2602 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2603 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2604 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2605 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2606 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2607 extern SDL_DECLSPEC void * SDLCALL SDL_memset4(void *dst, Uint32 val, size_t dwords);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2608
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2609 /* Take advantage of compiler optimizations for memset */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2610 #ifndef SDL_SLOW_MEMSET
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2611 #ifdef SDL_memset
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2612 #undef SDL_memset
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2613 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2614 #define SDL_memset memset
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2615 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2616
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2617 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2618 * Clear an object's memory to zero.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2619 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2620 * This is wrapper over SDL_memset that handles calculating the object size,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2621 * so there's no chance of copy/paste errors, and the code is cleaner.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2622 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2623 * This requires an object, not a pointer to an object, nor an array.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2624 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2625 * \param x the object to clear.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2626 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2627 * \threadsafety It is safe to call this macro from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2628 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2629 * \since This macro is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2630 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2631 * \sa SDL_zerop
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2632 * \sa SDL_zeroa
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2633 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2634 #define SDL_zero(x) SDL_memset(&(x), 0, sizeof((x)))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2635
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2636 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2637 * Clear an object's memory to zero, using a pointer.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2638 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2639 * This is wrapper over SDL_memset that handles calculating the object size,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2640 * so there's no chance of copy/paste errors, and the code is cleaner.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2641 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2642 * This requires a pointer to an object, not an object itself, nor an array.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2643 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2644 * \param x a pointer to the object to clear.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2645 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2646 * \threadsafety It is safe to call this macro from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2647 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2648 * \since This macro is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2649 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2650 * \sa SDL_zero
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2651 * \sa SDL_zeroa
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2652 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2653 #define SDL_zerop(x) SDL_memset((x), 0, sizeof(*(x)))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2654
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2655 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2656 * Clear an array's memory to zero.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2657 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2658 * This is wrapper over SDL_memset that handles calculating the array size, so
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2659 * there's no chance of copy/paste errors, and the code is cleaner.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2660 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2661 * This requires an array, not an object, nor a pointer to an object.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2662 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2663 * \param x an array to clear.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2664 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2665 * \threadsafety It is safe to call this macro from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2666 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2667 * \since This macro is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2668 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2669 * \sa SDL_zero
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2670 * \sa SDL_zerop
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2671 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2672 #define SDL_zeroa(x) SDL_memset((x), 0, sizeof((x)))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2673
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2674
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2675 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2676 * Compare two buffers of memory.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2677 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2678 * \param s1 the first buffer to compare. NULL is not permitted!
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2679 * \param s2 the second buffer to compare. NULL is not permitted!
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2680 * \param len the number of bytes to compare between the buffers.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2681 * \returns less than zero if s1 is "less than" s2, greater than zero if s1 is
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2682 * "greater than" s2, and zero if the buffers match exactly for `len`
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2683 * bytes.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2684 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2685 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2686 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2687 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2688 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2689 extern SDL_DECLSPEC int SDLCALL SDL_memcmp(const void *s1, const void *s2, size_t len);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2690
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2691 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2692 * This works exactly like wcslen() but doesn't require access to a C runtime.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2693 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2694 * Counts the number of wchar_t values in `wstr`, excluding the null
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2695 * terminator.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2696 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2697 * Like SDL_strlen only counts bytes and not codepoints in a UTF-8 string,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2698 * this counts wchar_t values in a string, even if the string's encoding is of
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2699 * variable width, like UTF-16.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2700 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2701 * Also be aware that wchar_t is different sizes on different platforms (4
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2702 * bytes on Linux, 2 on Windows, etc).
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2703 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2704 * \param wstr The null-terminated wide string to read. Must not be NULL.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2705 * \returns the length (in wchar_t values, excluding the null terminator) of
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2706 * `wstr`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2707 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2708 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2709 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2710 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2711 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2712 * \sa SDL_wcsnlen
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2713 * \sa SDL_utf8strlen
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2714 * \sa SDL_utf8strnlen
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2715 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2716 extern SDL_DECLSPEC size_t SDLCALL SDL_wcslen(const wchar_t *wstr);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2717
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2718 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2719 * This works exactly like wcsnlen() but doesn't require access to a C
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2720 * runtime.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2721 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2722 * Counts up to a maximum of `maxlen` wchar_t values in `wstr`, excluding the
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2723 * null terminator.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2724 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2725 * Like SDL_strnlen only counts bytes and not codepoints in a UTF-8 string,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2726 * this counts wchar_t values in a string, even if the string's encoding is of
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2727 * variable width, like UTF-16.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2728 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2729 * Also be aware that wchar_t is different sizes on different platforms (4
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2730 * bytes on Linux, 2 on Windows, etc).
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2731 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2732 * Also, `maxlen` is a count of wide characters, not bytes!
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2733 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2734 * \param wstr The null-terminated wide string to read. Must not be NULL.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2735 * \param maxlen The maximum amount of wide characters to count.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2736 * \returns the length (in wide characters, excluding the null terminator) of
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2737 * `wstr` but never more than `maxlen`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2738 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2739 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2740 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2741 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2742 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2743 * \sa SDL_wcslen
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2744 * \sa SDL_utf8strlen
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2745 * \sa SDL_utf8strnlen
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2746 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2747 extern SDL_DECLSPEC size_t SDLCALL SDL_wcsnlen(const wchar_t *wstr, size_t maxlen);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2748
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2749 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2750 * Copy a wide string.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2751 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2752 * This function copies `maxlen` - 1 wide characters from `src` to `dst`, then
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2753 * appends a null terminator.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2754 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2755 * `src` and `dst` must not overlap.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2756 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2757 * If `maxlen` is 0, no wide characters are copied and no null terminator is
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2758 * written.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2759 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2760 * \param dst The destination buffer. Must not be NULL, and must not overlap
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2761 * with `src`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2762 * \param src The null-terminated wide string to copy. Must not be NULL, and
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2763 * must not overlap with `dst`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2764 * \param maxlen The length (in wide characters) of the destination buffer.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2765 * \returns the length (in wide characters, excluding the null terminator) of
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2766 * `src`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2767 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2768 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2769 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2770 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2771 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2772 * \sa SDL_wcslcat
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2773 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2774 extern SDL_DECLSPEC size_t SDLCALL SDL_wcslcpy(SDL_OUT_Z_CAP(maxlen) wchar_t *dst, const wchar_t *src, size_t maxlen);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2775
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2776 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2777 * Concatenate wide strings.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2778 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2779 * This function appends up to `maxlen` - SDL_wcslen(dst) - 1 wide characters
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2780 * from `src` to the end of the wide string in `dst`, then appends a null
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2781 * terminator.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2782 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2783 * `src` and `dst` must not overlap.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2784 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2785 * If `maxlen` - SDL_wcslen(dst) - 1 is less than or equal to 0, then `dst` is
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2786 * unmodified.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2787 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2788 * \param dst The destination buffer already containing the first
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2789 * null-terminated wide string. Must not be NULL and must not
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2790 * overlap with `src`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2791 * \param src The second null-terminated wide string. Must not be NULL, and
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2792 * must not overlap with `dst`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2793 * \param maxlen The length (in wide characters) of the destination buffer.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2794 * \returns the length (in wide characters, excluding the null terminator) of
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2795 * the string in `dst` plus the length of `src`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2796 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2797 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2798 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2799 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2800 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2801 * \sa SDL_wcslcpy
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2802 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2803 extern SDL_DECLSPEC size_t SDLCALL SDL_wcslcat(SDL_INOUT_Z_CAP(maxlen) wchar_t *dst, const wchar_t *src, size_t maxlen);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2804
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2805 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2806 * Allocate a copy of a wide string.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2807 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2808 * This allocates enough space for a null-terminated copy of `wstr`, using
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2809 * SDL_malloc, and then makes a copy of the string into this space.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2810 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2811 * The returned string is owned by the caller, and should be passed to
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2812 * SDL_free when no longer needed.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2813 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2814 * \param wstr the string to copy.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2815 * \returns a pointer to the newly-allocated wide string.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2816 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2817 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2818 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2819 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2820 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2821 extern SDL_DECLSPEC wchar_t * SDLCALL SDL_wcsdup(const wchar_t *wstr);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2822
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2823 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2824 * Search a wide string for the first instance of a specific substring.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2825 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2826 * The search ends once it finds the requested substring, or a null terminator
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2827 * byte to end the string.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2828 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2829 * Note that this looks for strings of _wide characters_, not _codepoints_, so
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2830 * it's legal to search for malformed and incomplete UTF-16 sequences.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2831 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2832 * \param haystack the wide string to search. Must not be NULL.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2833 * \param needle the wide string to search for. Must not be NULL.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2834 * \returns a pointer to the first instance of `needle` in the string, or NULL
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2835 * if not found.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2836 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2837 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2838 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2839 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2840 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2841 extern SDL_DECLSPEC wchar_t * SDLCALL SDL_wcsstr(const wchar_t *haystack, const wchar_t *needle);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2842
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2843 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2844 * Search a wide string, up to n wide chars, for the first instance of a
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2845 * specific substring.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2846 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2847 * The search ends once it finds the requested substring, or a null terminator
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2848 * value to end the string, or `maxlen` wide character have been examined. It
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2849 * is possible to use this function on a wide string without a null
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2850 * terminator.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2851 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2852 * Note that this looks for strings of _wide characters_, not _codepoints_, so
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2853 * it's legal to search for malformed and incomplete UTF-16 sequences.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2854 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2855 * \param haystack the wide string to search. Must not be NULL.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2856 * \param needle the wide string to search for. Must not be NULL.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2857 * \param maxlen the maximum number of wide characters to search in
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2858 * `haystack`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2859 * \returns a pointer to the first instance of `needle` in the string, or NULL
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2860 * if not found.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2861 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2862 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2863 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2864 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2865 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2866 extern SDL_DECLSPEC wchar_t * SDLCALL SDL_wcsnstr(const wchar_t *haystack, const wchar_t *needle, size_t maxlen);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2867
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2868 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2869 * Compare two null-terminated wide strings.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2870 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2871 * This only compares wchar_t values until it hits a null-terminating
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2872 * character; it does not care if the string is well-formed UTF-16 (or UTF-32,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2873 * depending on your platform's wchar_t size), or uses valid Unicode values.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2874 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2875 * \param str1 the first string to compare. NULL is not permitted!
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2876 * \param str2 the second string to compare. NULL is not permitted!
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2877 * \returns less than zero if str1 is "less than" str2, greater than zero if
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2878 * str1 is "greater than" str2, and zero if the strings match
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2879 * exactly.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2880 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2881 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2882 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2883 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2884 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2885 extern SDL_DECLSPEC int SDLCALL SDL_wcscmp(const wchar_t *str1, const wchar_t *str2);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2886
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2887 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2888 * Compare two wide strings up to a number of wchar_t values.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2889 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2890 * This only compares wchar_t values; it does not care if the string is
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2891 * well-formed UTF-16 (or UTF-32, depending on your platform's wchar_t size),
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2892 * or uses valid Unicode values.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2893 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2894 * Note that while this function is intended to be used with UTF-16 (or
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2895 * UTF-32, depending on your platform's definition of wchar_t), it is
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2896 * comparing raw wchar_t values and not Unicode codepoints: `maxlen` specifies
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2897 * a wchar_t limit! If the limit lands in the middle of a multi-wchar UTF-16
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2898 * sequence, it will only compare a portion of the final character.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2899 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2900 * `maxlen` specifies a maximum number of wchar_t to compare; if the strings
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2901 * match to this number of wide chars (or both have matched to a
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2902 * null-terminator character before this count), they will be considered
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2903 * equal.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2904 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2905 * \param str1 the first string to compare. NULL is not permitted!
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2906 * \param str2 the second string to compare. NULL is not permitted!
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2907 * \param maxlen the maximum number of wchar_t to compare.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2908 * \returns less than zero if str1 is "less than" str2, greater than zero if
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2909 * str1 is "greater than" str2, and zero if the strings match
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2910 * exactly.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2911 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2912 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2913 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2914 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2915 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2916 extern SDL_DECLSPEC int SDLCALL SDL_wcsncmp(const wchar_t *str1, const wchar_t *str2, size_t maxlen);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2917
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2918 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2919 * Compare two null-terminated wide strings, case-insensitively.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2920 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2921 * This will work with Unicode strings, using a technique called
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2922 * "case-folding" to handle the vast majority of case-sensitive human
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2923 * languages regardless of system locale. It can deal with expanding values: a
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2924 * German Eszett character can compare against two ASCII 's' chars and be
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2925 * considered a match, for example. A notable exception: it does not handle
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2926 * the Turkish 'i' character; human language is complicated!
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2927 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2928 * Depending on your platform, "wchar_t" might be 2 bytes, and expected to be
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2929 * UTF-16 encoded (like Windows), or 4 bytes in UTF-32 format. Since this
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2930 * handles Unicode, it expects the string to be well-formed and not a
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2931 * null-terminated string of arbitrary bytes. Characters that are not valid
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2932 * UTF-16 (or UTF-32) are treated as Unicode character U+FFFD (REPLACEMENT
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2933 * CHARACTER), which is to say two strings of random bits may turn out to
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2934 * match if they convert to the same amount of replacement characters.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2935 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2936 * \param str1 the first string to compare. NULL is not permitted!
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2937 * \param str2 the second string to compare. NULL is not permitted!
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2938 * \returns less than zero if str1 is "less than" str2, greater than zero if
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2939 * str1 is "greater than" str2, and zero if the strings match
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2940 * exactly.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2941 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2942 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2943 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2944 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2945 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2946 extern SDL_DECLSPEC int SDLCALL SDL_wcscasecmp(const wchar_t *str1, const wchar_t *str2);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2947
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2948 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2949 * Compare two wide strings, case-insensitively, up to a number of wchar_t.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2950 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2951 * This will work with Unicode strings, using a technique called
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2952 * "case-folding" to handle the vast majority of case-sensitive human
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2953 * languages regardless of system locale. It can deal with expanding values: a
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2954 * German Eszett character can compare against two ASCII 's' chars and be
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2955 * considered a match, for example. A notable exception: it does not handle
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2956 * the Turkish 'i' character; human language is complicated!
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2957 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2958 * Depending on your platform, "wchar_t" might be 2 bytes, and expected to be
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2959 * UTF-16 encoded (like Windows), or 4 bytes in UTF-32 format. Since this
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2960 * handles Unicode, it expects the string to be well-formed and not a
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2961 * null-terminated string of arbitrary bytes. Characters that are not valid
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2962 * UTF-16 (or UTF-32) are treated as Unicode character U+FFFD (REPLACEMENT
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2963 * CHARACTER), which is to say two strings of random bits may turn out to
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2964 * match if they convert to the same amount of replacement characters.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2965 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2966 * Note that while this function might deal with variable-sized characters,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2967 * `maxlen` specifies a _wchar_ limit! If the limit lands in the middle of a
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2968 * multi-byte UTF-16 sequence, it may convert a portion of the final character
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2969 * to one or more Unicode character U+FFFD (REPLACEMENT CHARACTER) so as not
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2970 * to overflow a buffer.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2971 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2972 * `maxlen` specifies a maximum number of wchar_t values to compare; if the
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2973 * strings match to this number of wchar_t (or both have matched to a
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2974 * null-terminator character before this number of bytes), they will be
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2975 * considered equal.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2976 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2977 * \param str1 the first string to compare. NULL is not permitted!
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2978 * \param str2 the second string to compare. NULL is not permitted!
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2979 * \param maxlen the maximum number of wchar_t values to compare.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2980 * \returns less than zero if str1 is "less than" str2, greater than zero if
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2981 * str1 is "greater than" str2, and zero if the strings match
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2982 * exactly.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2983 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2984 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2985 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2986 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2987 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2988 extern SDL_DECLSPEC int SDLCALL SDL_wcsncasecmp(const wchar_t *str1, const wchar_t *str2, size_t maxlen);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2989
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2990 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2991 * Parse a `long` from a wide string.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2992 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2993 * If `str` starts with whitespace, then those whitespace characters are
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2994 * skipped before attempting to parse the number.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2995 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2996 * If the parsed number does not fit inside a `long`, the result is clamped to
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2997 * the minimum and maximum representable `long` values.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2998 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2999 * \param str The null-terminated wide string to read. Must not be NULL.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3000 * \param endp If not NULL, the address of the first invalid wide character
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3001 * (i.e. the next character after the parsed number) will be
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3002 * written to this pointer.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3003 * \param base The base of the integer to read. Supported values are 0 and 2
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3004 * to 36 inclusive. If 0, the base will be inferred from the
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3005 * number's prefix (0x for hexadecimal, 0 for octal, decimal
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3006 * otherwise).
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3007 * \returns the parsed `long`, or 0 if no number could be parsed.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3008 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3009 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3010 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3011 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3012 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3013 * \sa SDL_strtol
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3014 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3015 extern SDL_DECLSPEC long SDLCALL SDL_wcstol(const wchar_t *str, wchar_t **endp, int base);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3016
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3017 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3018 * This works exactly like strlen() but doesn't require access to a C runtime.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3019 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3020 * Counts the bytes in `str`, excluding the null terminator.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3021 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3022 * If you need the length of a UTF-8 string, consider using SDL_utf8strlen().
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3023 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3024 * \param str The null-terminated string to read. Must not be NULL.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3025 * \returns the length (in bytes, excluding the null terminator) of `src`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3026 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3027 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3028 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3029 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3030 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3031 * \sa SDL_strnlen
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3032 * \sa SDL_utf8strlen
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3033 * \sa SDL_utf8strnlen
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3034 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3035 extern SDL_DECLSPEC size_t SDLCALL SDL_strlen(const char *str);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3036
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3037 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3038 * This works exactly like strnlen() but doesn't require access to a C
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3039 * runtime.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3040 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3041 * Counts up to a maximum of `maxlen` bytes in `str`, excluding the null
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3042 * terminator.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3043 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3044 * If you need the length of a UTF-8 string, consider using SDL_utf8strnlen().
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3045 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3046 * \param str The null-terminated string to read. Must not be NULL.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3047 * \param maxlen The maximum amount of bytes to count.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3048 * \returns the length (in bytes, excluding the null terminator) of `src` but
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3049 * never more than `maxlen`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3050 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3051 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3052 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3053 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3054 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3055 * \sa SDL_strlen
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3056 * \sa SDL_utf8strlen
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3057 * \sa SDL_utf8strnlen
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3058 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3059 extern SDL_DECLSPEC size_t SDLCALL SDL_strnlen(const char *str, size_t maxlen);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3060
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3061 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3062 * Copy a string.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3063 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3064 * This function copies up to `maxlen` - 1 characters from `src` to `dst`,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3065 * then appends a null terminator.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3066 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3067 * If `maxlen` is 0, no characters are copied and no null terminator is
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3068 * written.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3069 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3070 * If you want to copy an UTF-8 string but need to ensure that multi-byte
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3071 * sequences are not truncated, consider using SDL_utf8strlcpy().
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3072 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3073 * \param dst The destination buffer. Must not be NULL, and must not overlap
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3074 * with `src`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3075 * \param src The null-terminated string to copy. Must not be NULL, and must
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3076 * not overlap with `dst`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3077 * \param maxlen The length (in characters) of the destination buffer.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3078 * \returns the length (in characters, excluding the null terminator) of
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3079 * `src`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3080 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3081 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3082 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3083 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3084 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3085 * \sa SDL_strlcat
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3086 * \sa SDL_utf8strlcpy
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3087 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3088 extern SDL_DECLSPEC size_t SDLCALL SDL_strlcpy(SDL_OUT_Z_CAP(maxlen) char *dst, const char *src, size_t maxlen);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3089
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3090 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3091 * Copy an UTF-8 string.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3092 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3093 * This function copies up to `dst_bytes` - 1 bytes from `src` to `dst` while
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3094 * also ensuring that the string written to `dst` does not end in a truncated
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3095 * multi-byte sequence. Finally, it appends a null terminator.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3096 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3097 * `src` and `dst` must not overlap.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3098 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3099 * Note that unlike SDL_strlcpy(), this function returns the number of bytes
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3100 * written, not the length of `src`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3101 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3102 * \param dst The destination buffer. Must not be NULL, and must not overlap
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3103 * with `src`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3104 * \param src The null-terminated UTF-8 string to copy. Must not be NULL, and
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3105 * must not overlap with `dst`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3106 * \param dst_bytes The length (in bytes) of the destination buffer. Must not
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3107 * be 0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3108 * \returns the number of bytes written, excluding the null terminator.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3109 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3110 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3111 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3112 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3113 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3114 * \sa SDL_strlcpy
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3115 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3116 extern SDL_DECLSPEC size_t SDLCALL SDL_utf8strlcpy(SDL_OUT_Z_CAP(dst_bytes) char *dst, const char *src, size_t dst_bytes);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3117
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3118 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3119 * Concatenate strings.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3120 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3121 * This function appends up to `maxlen` - SDL_strlen(dst) - 1 characters from
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3122 * `src` to the end of the string in `dst`, then appends a null terminator.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3123 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3124 * `src` and `dst` must not overlap.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3125 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3126 * If `maxlen` - SDL_strlen(dst) - 1 is less than or equal to 0, then `dst` is
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3127 * unmodified.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3128 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3129 * \param dst The destination buffer already containing the first
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3130 * null-terminated string. Must not be NULL and must not overlap
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3131 * with `src`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3132 * \param src The second null-terminated string. Must not be NULL, and must
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3133 * not overlap with `dst`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3134 * \param maxlen The length (in characters) of the destination buffer.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3135 * \returns the length (in characters, excluding the null terminator) of the
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3136 * string in `dst` plus the length of `src`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3137 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3138 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3139 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3140 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3141 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3142 * \sa SDL_strlcpy
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3143 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3144 extern SDL_DECLSPEC size_t SDLCALL SDL_strlcat(SDL_INOUT_Z_CAP(maxlen) char *dst, const char *src, size_t maxlen);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3145
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3146 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3147 * Allocate a copy of a string.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3148 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3149 * This allocates enough space for a null-terminated copy of `str`, using
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3150 * SDL_malloc, and then makes a copy of the string into this space.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3151 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3152 * The returned string is owned by the caller, and should be passed to
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3153 * SDL_free when no longer needed.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3154 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3155 * \param str the string to copy.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3156 * \returns a pointer to the newly-allocated string.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3157 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3158 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3159 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3160 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3161 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3162 extern SDL_DECLSPEC SDL_MALLOC char * SDLCALL SDL_strdup(const char *str);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3163
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3164 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3165 * Allocate a copy of a string, up to n characters.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3166 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3167 * This allocates enough space for a null-terminated copy of `str`, up to
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3168 * `maxlen` bytes, using SDL_malloc, and then makes a copy of the string into
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3169 * this space.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3170 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3171 * If the string is longer than `maxlen` bytes, the returned string will be
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3172 * `maxlen` bytes long, plus a null-terminator character that isn't included
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3173 * in the count.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3174 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3175 * The returned string is owned by the caller, and should be passed to
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3176 * SDL_free when no longer needed.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3177 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3178 * \param str the string to copy.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3179 * \param maxlen the maximum length of the copied string, not counting the
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3180 * null-terminator character.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3181 * \returns a pointer to the newly-allocated string.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3182 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3183 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3184 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3185 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3186 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3187 extern SDL_DECLSPEC SDL_MALLOC char * SDLCALL SDL_strndup(const char *str, size_t maxlen);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3188
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3189 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3190 * Reverse a string's contents.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3191 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3192 * This reverses a null-terminated string in-place. Only the content of the
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3193 * string is reversed; the null-terminator character remains at the end of the
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3194 * reversed string.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3195 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3196 * **WARNING**: This function reverses the _bytes_ of the string, not the
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3197 * codepoints. If `str` is a UTF-8 string with Unicode codepoints > 127, this
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3198 * will ruin the string data. You should only use this function on strings
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3199 * that are completely comprised of low ASCII characters.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3200 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3201 * \param str the string to reverse.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3202 * \returns `str`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3203 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3204 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3205 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3206 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3207 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3208 extern SDL_DECLSPEC char * SDLCALL SDL_strrev(char *str);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3209
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3210 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3211 * Convert a string to uppercase.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3212 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3213 * **WARNING**: Regardless of system locale, this will only convert ASCII
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3214 * values 'A' through 'Z' to uppercase.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3215 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3216 * This function operates on a null-terminated string of bytes--even if it is
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3217 * malformed UTF-8!--and converts ASCII characters 'a' through 'z' to their
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3218 * uppercase equivalents in-place, returning the original `str` pointer.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3219 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3220 * \param str the string to convert in-place. Can not be NULL.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3221 * \returns the `str` pointer passed into this function.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3222 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3223 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3224 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3225 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3226 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3227 * \sa SDL_strlwr
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3228 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3229 extern SDL_DECLSPEC char * SDLCALL SDL_strupr(char *str);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3230
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3231 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3232 * Convert a string to lowercase.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3233 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3234 * **WARNING**: Regardless of system locale, this will only convert ASCII
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3235 * values 'A' through 'Z' to lowercase.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3236 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3237 * This function operates on a null-terminated string of bytes--even if it is
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3238 * malformed UTF-8!--and converts ASCII characters 'A' through 'Z' to their
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3239 * lowercase equivalents in-place, returning the original `str` pointer.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3240 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3241 * \param str the string to convert in-place. Can not be NULL.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3242 * \returns the `str` pointer passed into this function.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3243 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3244 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3245 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3246 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3247 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3248 * \sa SDL_strupr
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3249 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3250 extern SDL_DECLSPEC char * SDLCALL SDL_strlwr(char *str);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3251
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3252 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3253 * Search a string for the first instance of a specific byte.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3254 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3255 * The search ends once it finds the requested byte value, or a null
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3256 * terminator byte to end the string.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3257 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3258 * Note that this looks for _bytes_, not _characters_, so you cannot match
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3259 * against a Unicode codepoint > 255, regardless of character encoding.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3260 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3261 * \param str the string to search. Must not be NULL.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3262 * \param c the byte value to search for.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3263 * \returns a pointer to the first instance of `c` in the string, or NULL if
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3264 * not found.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3265 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3266 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3267 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3268 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3269 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3270 extern SDL_DECLSPEC char * SDLCALL SDL_strchr(const char *str, int c);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3271
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3272 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3273 * Search a string for the last instance of a specific byte.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3274 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3275 * The search must go until it finds a null terminator byte to end the string.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3276 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3277 * Note that this looks for _bytes_, not _characters_, so you cannot match
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3278 * against a Unicode codepoint > 255, regardless of character encoding.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3279 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3280 * \param str the string to search. Must not be NULL.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3281 * \param c the byte value to search for.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3282 * \returns a pointer to the last instance of `c` in the string, or NULL if
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3283 * not found.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3284 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3285 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3286 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3287 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3288 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3289 extern SDL_DECLSPEC char * SDLCALL SDL_strrchr(const char *str, int c);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3290
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3291 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3292 * Search a string for the first instance of a specific substring.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3293 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3294 * The search ends once it finds the requested substring, or a null terminator
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3295 * byte to end the string.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3296 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3297 * Note that this looks for strings of _bytes_, not _characters_, so it's
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3298 * legal to search for malformed and incomplete UTF-8 sequences.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3299 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3300 * \param haystack the string to search. Must not be NULL.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3301 * \param needle the string to search for. Must not be NULL.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3302 * \returns a pointer to the first instance of `needle` in the string, or NULL
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3303 * if not found.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3304 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3305 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3306 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3307 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3308 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3309 extern SDL_DECLSPEC char * SDLCALL SDL_strstr(const char *haystack, const char *needle);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3310
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3311 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3312 * Search a string, up to n bytes, for the first instance of a specific
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3313 * substring.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3314 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3315 * The search ends once it finds the requested substring, or a null terminator
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3316 * byte to end the string, or `maxlen` bytes have been examined. It is
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3317 * possible to use this function on a string without a null terminator.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3318 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3319 * Note that this looks for strings of _bytes_, not _characters_, so it's
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3320 * legal to search for malformed and incomplete UTF-8 sequences.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3321 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3322 * \param haystack the string to search. Must not be NULL.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3323 * \param needle the string to search for. Must not be NULL.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3324 * \param maxlen the maximum number of bytes to search in `haystack`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3325 * \returns a pointer to the first instance of `needle` in the string, or NULL
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3326 * if not found.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3327 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3328 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3329 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3330 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3331 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3332 extern SDL_DECLSPEC char * SDLCALL SDL_strnstr(const char *haystack, const char *needle, size_t maxlen);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3333
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3334 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3335 * Search a UTF-8 string for the first instance of a specific substring,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3336 * case-insensitively.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3337 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3338 * This will work with Unicode strings, using a technique called
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3339 * "case-folding" to handle the vast majority of case-sensitive human
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3340 * languages regardless of system locale. It can deal with expanding values: a
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3341 * German Eszett character can compare against two ASCII 's' chars and be
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3342 * considered a match, for example. A notable exception: it does not handle
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3343 * the Turkish 'i' character; human language is complicated!
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3344 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3345 * Since this handles Unicode, it expects the strings to be well-formed UTF-8
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3346 * and not a null-terminated string of arbitrary bytes. Bytes that are not
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3347 * valid UTF-8 are treated as Unicode character U+FFFD (REPLACEMENT
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3348 * CHARACTER), which is to say two strings of random bits may turn out to
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3349 * match if they convert to the same amount of replacement characters.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3350 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3351 * \param haystack the string to search. Must not be NULL.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3352 * \param needle the string to search for. Must not be NULL.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3353 * \returns a pointer to the first instance of `needle` in the string, or NULL
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3354 * if not found.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3355 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3356 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3357 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3358 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3359 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3360 extern SDL_DECLSPEC char * SDLCALL SDL_strcasestr(const char *haystack, const char *needle);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3361
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3362 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3363 * This works exactly like strtok_r() but doesn't require access to a C
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3364 * runtime.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3365 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3366 * Break a string up into a series of tokens.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3367 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3368 * To start tokenizing a new string, `str` should be the non-NULL address of
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3369 * the string to start tokenizing. Future calls to get the next token from the
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3370 * same string should specify a NULL.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3371 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3372 * Note that this function will overwrite pieces of `str` with null chars to
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3373 * split it into tokens. This function cannot be used with const/read-only
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3374 * strings!
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3375 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3376 * `saveptr` just needs to point to a `char *` that can be overwritten; SDL
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3377 * will use this to save tokenizing state between calls. It is initialized if
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3378 * `str` is non-NULL, and used to resume tokenizing when `str` is NULL.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3379 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3380 * \param str the string to tokenize, or NULL to continue tokenizing.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3381 * \param delim the delimiter string that separates tokens.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3382 * \param saveptr pointer to a char *, used for ongoing state.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3383 * \returns A pointer to the next token, or NULL if no tokens remain.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3384 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3385 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3386 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3387 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3388 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3389 extern SDL_DECLSPEC char * SDLCALL SDL_strtok_r(char *str, const char *delim, char **saveptr);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3390
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3391 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3392 * Count the number of codepoints in a UTF-8 string.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3393 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3394 * Counts the _codepoints_, not _bytes_, in `str`, excluding the null
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3395 * terminator.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3396 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3397 * If you need to count the bytes in a string instead, consider using
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3398 * SDL_strlen().
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3399 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3400 * Since this handles Unicode, it expects the strings to be well-formed UTF-8
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3401 * and not a null-terminated string of arbitrary bytes. Bytes that are not
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3402 * valid UTF-8 are treated as Unicode character U+FFFD (REPLACEMENT
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3403 * CHARACTER), so a malformed or incomplete UTF-8 sequence might increase the
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3404 * count by several replacement characters.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3405 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3406 * \param str The null-terminated UTF-8 string to read. Must not be NULL.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3407 * \returns The length (in codepoints, excluding the null terminator) of
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3408 * `src`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3409 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3410 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3411 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3412 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3413 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3414 * \sa SDL_utf8strnlen
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3415 * \sa SDL_strlen
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3416 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3417 extern SDL_DECLSPEC size_t SDLCALL SDL_utf8strlen(const char *str);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3418
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3419 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3420 * Count the number of codepoints in a UTF-8 string, up to n bytes.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3421 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3422 * Counts the _codepoints_, not _bytes_, in `str`, excluding the null
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3423 * terminator.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3424 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3425 * If you need to count the bytes in a string instead, consider using
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3426 * SDL_strnlen().
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3427 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3428 * The counting stops at `bytes` bytes (not codepoints!). This seems
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3429 * counterintuitive, but makes it easy to express the total size of the
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3430 * string's buffer.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3431 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3432 * Since this handles Unicode, it expects the strings to be well-formed UTF-8
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3433 * and not a null-terminated string of arbitrary bytes. Bytes that are not
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3434 * valid UTF-8 are treated as Unicode character U+FFFD (REPLACEMENT
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3435 * CHARACTER), so a malformed or incomplete UTF-8 sequence might increase the
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3436 * count by several replacement characters.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3437 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3438 * \param str The null-terminated UTF-8 string to read. Must not be NULL.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3439 * \param bytes The maximum amount of bytes to count.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3440 * \returns The length (in codepoints, excluding the null terminator) of `src`
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3441 * but never more than `maxlen`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3442 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3443 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3444 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3445 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3446 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3447 * \sa SDL_utf8strlen
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3448 * \sa SDL_strnlen
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3449 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3450 extern SDL_DECLSPEC size_t SDLCALL SDL_utf8strnlen(const char *str, size_t bytes);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3451
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3452 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3453 * Convert an integer into a string.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3454 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3455 * This requires a radix to specified for string format. Specifying 10
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3456 * produces a decimal number, 16 hexadecimal, etc. Must be in the range of 2
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3457 * to 36.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3458 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3459 * Note that this function will overflow a buffer if `str` is not large enough
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3460 * to hold the output! It may be safer to use SDL_snprintf to clamp output, or
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3461 * SDL_asprintf to allocate a buffer. Otherwise, it doesn't hurt to allocate
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3462 * much more space than you expect to use (and don't forget possible negative
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3463 * signs, null terminator bytes, etc).
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3464 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3465 * \param value the integer to convert.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3466 * \param str the buffer to write the string into.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3467 * \param radix the radix to use for string generation.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3468 * \returns `str`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3469 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3470 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3471 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3472 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3473 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3474 * \sa SDL_uitoa
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3475 * \sa SDL_ltoa
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3476 * \sa SDL_lltoa
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3477 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3478 extern SDL_DECLSPEC char * SDLCALL SDL_itoa(int value, char *str, int radix);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3479
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3480 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3481 * Convert an unsigned integer into a string.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3482 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3483 * This requires a radix to specified for string format. Specifying 10
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3484 * produces a decimal number, 16 hexadecimal, etc. Must be in the range of 2
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3485 * to 36.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3486 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3487 * Note that this function will overflow a buffer if `str` is not large enough
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3488 * to hold the output! It may be safer to use SDL_snprintf to clamp output, or
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3489 * SDL_asprintf to allocate a buffer. Otherwise, it doesn't hurt to allocate
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3490 * much more space than you expect to use (and don't forget null terminator
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3491 * bytes, etc).
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3492 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3493 * \param value the unsigned integer to convert.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3494 * \param str the buffer to write the string into.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3495 * \param radix the radix to use for string generation.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3496 * \returns `str`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3497 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3498 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3499 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3500 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3501 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3502 * \sa SDL_itoa
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3503 * \sa SDL_ultoa
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3504 * \sa SDL_ulltoa
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3505 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3506 extern SDL_DECLSPEC char * SDLCALL SDL_uitoa(unsigned int value, char *str, int radix);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3507
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3508 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3509 * Convert a long integer into a string.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3510 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3511 * This requires a radix to specified for string format. Specifying 10
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3512 * produces a decimal number, 16 hexadecimal, etc. Must be in the range of 2
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3513 * to 36.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3514 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3515 * Note that this function will overflow a buffer if `str` is not large enough
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3516 * to hold the output! It may be safer to use SDL_snprintf to clamp output, or
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3517 * SDL_asprintf to allocate a buffer. Otherwise, it doesn't hurt to allocate
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3518 * much more space than you expect to use (and don't forget possible negative
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3519 * signs, null terminator bytes, etc).
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3520 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3521 * \param value the long integer to convert.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3522 * \param str the buffer to write the string into.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3523 * \param radix the radix to use for string generation.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3524 * \returns `str`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3525 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3526 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3527 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3528 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3529 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3530 * \sa SDL_ultoa
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3531 * \sa SDL_itoa
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3532 * \sa SDL_lltoa
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3533 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3534 extern SDL_DECLSPEC char * SDLCALL SDL_ltoa(long value, char *str, int radix);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3535
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3536 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3537 * Convert an unsigned long integer into a string.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3538 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3539 * This requires a radix to specified for string format. Specifying 10
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3540 * produces a decimal number, 16 hexadecimal, etc. Must be in the range of 2
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3541 * to 36.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3542 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3543 * Note that this function will overflow a buffer if `str` is not large enough
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3544 * to hold the output! It may be safer to use SDL_snprintf to clamp output, or
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3545 * SDL_asprintf to allocate a buffer. Otherwise, it doesn't hurt to allocate
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3546 * much more space than you expect to use (and don't forget null terminator
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3547 * bytes, etc).
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3548 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3549 * \param value the unsigned long integer to convert.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3550 * \param str the buffer to write the string into.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3551 * \param radix the radix to use for string generation.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3552 * \returns `str`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3553 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3554 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3555 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3556 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3557 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3558 * \sa SDL_ltoa
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3559 * \sa SDL_uitoa
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3560 * \sa SDL_ulltoa
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3561 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3562 extern SDL_DECLSPEC char * SDLCALL SDL_ultoa(unsigned long value, char *str, int radix);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3563
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3564 #ifndef SDL_NOLONGLONG
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3565
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3566 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3567 * Convert a long long integer into a string.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3568 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3569 * This requires a radix to specified for string format. Specifying 10
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3570 * produces a decimal number, 16 hexadecimal, etc. Must be in the range of 2
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3571 * to 36.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3572 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3573 * Note that this function will overflow a buffer if `str` is not large enough
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3574 * to hold the output! It may be safer to use SDL_snprintf to clamp output, or
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3575 * SDL_asprintf to allocate a buffer. Otherwise, it doesn't hurt to allocate
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3576 * much more space than you expect to use (and don't forget possible negative
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3577 * signs, null terminator bytes, etc).
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3578 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3579 * \param value the long long integer to convert.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3580 * \param str the buffer to write the string into.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3581 * \param radix the radix to use for string generation.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3582 * \returns `str`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3583 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3584 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3585 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3586 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3587 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3588 * \sa SDL_ulltoa
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3589 * \sa SDL_itoa
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3590 * \sa SDL_ltoa
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3591 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3592 extern SDL_DECLSPEC char * SDLCALL SDL_lltoa(long long value, char *str, int radix);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3593
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3594 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3595 * Convert an unsigned long long integer into a string.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3596 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3597 * This requires a radix to specified for string format. Specifying 10
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3598 * produces a decimal number, 16 hexadecimal, etc. Must be in the range of 2
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3599 * to 36.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3600 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3601 * Note that this function will overflow a buffer if `str` is not large enough
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3602 * to hold the output! It may be safer to use SDL_snprintf to clamp output, or
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3603 * SDL_asprintf to allocate a buffer. Otherwise, it doesn't hurt to allocate
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3604 * much more space than you expect to use (and don't forget null terminator
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3605 * bytes, etc).
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3606 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3607 * \param value the unsigned long long integer to convert.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3608 * \param str the buffer to write the string into.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3609 * \param radix the radix to use for string generation.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3610 * \returns `str`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3611 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3612 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3613 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3614 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3615 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3616 * \sa SDL_lltoa
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3617 * \sa SDL_uitoa
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3618 * \sa SDL_ultoa
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3619 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3620 extern SDL_DECLSPEC char * SDLCALL SDL_ulltoa(unsigned long long value, char *str, int radix);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3621 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3622
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3623 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3624 * Parse an `int` from a string.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3625 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3626 * The result of calling `SDL_atoi(str)` is equivalent to
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3627 * `(int)SDL_strtol(str, NULL, 10)`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3628 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3629 * \param str The null-terminated string to read. Must not be NULL.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3630 * \returns the parsed `int`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3631 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3632 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3633 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3634 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3635 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3636 * \sa SDL_atof
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3637 * \sa SDL_strtol
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3638 * \sa SDL_strtoul
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3639 * \sa SDL_strtoll
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3640 * \sa SDL_strtoull
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3641 * \sa SDL_strtod
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3642 * \sa SDL_itoa
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3643 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3644 extern SDL_DECLSPEC int SDLCALL SDL_atoi(const char *str);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3645
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3646 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3647 * Parse a `double` from a string.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3648 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3649 * The result of calling `SDL_atof(str)` is equivalent to `SDL_strtod(str,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3650 * NULL)`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3651 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3652 * \param str The null-terminated string to read. Must not be NULL.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3653 * \returns the parsed `double`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3654 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3655 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3656 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3657 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3658 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3659 * \sa SDL_atoi
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3660 * \sa SDL_strtol
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3661 * \sa SDL_strtoul
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3662 * \sa SDL_strtoll
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3663 * \sa SDL_strtoull
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3664 * \sa SDL_strtod
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3665 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3666 extern SDL_DECLSPEC double SDLCALL SDL_atof(const char *str);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3667
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3668 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3669 * Parse a `long` from a string.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3670 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3671 * If `str` starts with whitespace, then those whitespace characters are
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3672 * skipped before attempting to parse the number.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3673 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3674 * If the parsed number does not fit inside a `long`, the result is clamped to
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3675 * the minimum and maximum representable `long` values.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3676 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3677 * \param str The null-terminated string to read. Must not be NULL.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3678 * \param endp If not NULL, the address of the first invalid character (i.e.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3679 * the next character after the parsed number) will be written to
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3680 * this pointer.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3681 * \param base The base of the integer to read. Supported values are 0 and 2
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3682 * to 36 inclusive. If 0, the base will be inferred from the
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3683 * number's prefix (0x for hexadecimal, 0 for octal, decimal
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3684 * otherwise).
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3685 * \returns the parsed `long`, or 0 if no number could be parsed.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3686 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3687 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3688 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3689 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3690 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3691 * \sa SDL_atoi
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3692 * \sa SDL_atof
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3693 * \sa SDL_strtoul
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3694 * \sa SDL_strtoll
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3695 * \sa SDL_strtoull
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3696 * \sa SDL_strtod
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3697 * \sa SDL_ltoa
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3698 * \sa SDL_wcstol
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3699 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3700 extern SDL_DECLSPEC long SDLCALL SDL_strtol(const char *str, char **endp, int base);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3701
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3702 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3703 * Parse an `unsigned long` from a string.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3704 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3705 * If `str` starts with whitespace, then those whitespace characters are
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3706 * skipped before attempting to parse the number.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3707 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3708 * If the parsed number does not fit inside an `unsigned long`, the result is
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3709 * clamped to the maximum representable `unsigned long` value.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3710 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3711 * \param str The null-terminated string to read. Must not be NULL.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3712 * \param endp If not NULL, the address of the first invalid character (i.e.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3713 * the next character after the parsed number) will be written to
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3714 * this pointer.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3715 * \param base The base of the integer to read. Supported values are 0 and 2
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3716 * to 36 inclusive. If 0, the base will be inferred from the
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3717 * number's prefix (0x for hexadecimal, 0 for octal, decimal
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3718 * otherwise).
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3719 * \returns the parsed `unsigned long`, or 0 if no number could be parsed.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3720 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3721 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3722 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3723 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3724 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3725 * \sa SDL_atoi
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3726 * \sa SDL_atof
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3727 * \sa SDL_strtol
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3728 * \sa SDL_strtoll
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3729 * \sa SDL_strtoull
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3730 * \sa SDL_strtod
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3731 * \sa SDL_ultoa
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3732 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3733 extern SDL_DECLSPEC unsigned long SDLCALL SDL_strtoul(const char *str, char **endp, int base);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3734
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3735 #ifndef SDL_NOLONGLONG
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3736
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3737 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3738 * Parse a `long long` from a string.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3739 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3740 * If `str` starts with whitespace, then those whitespace characters are
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3741 * skipped before attempting to parse the number.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3742 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3743 * If the parsed number does not fit inside a `long long`, the result is
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3744 * clamped to the minimum and maximum representable `long long` values.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3745 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3746 * \param str The null-terminated string to read. Must not be NULL.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3747 * \param endp If not NULL, the address of the first invalid character (i.e.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3748 * the next character after the parsed number) will be written to
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3749 * this pointer.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3750 * \param base The base of the integer to read. Supported values are 0 and 2
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3751 * to 36 inclusive. If 0, the base will be inferred from the
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3752 * number's prefix (0x for hexadecimal, 0 for octal, decimal
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3753 * otherwise).
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3754 * \returns the parsed `long long`, or 0 if no number could be parsed.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3755 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3756 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3757 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3758 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3759 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3760 * \sa SDL_atoi
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3761 * \sa SDL_atof
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3762 * \sa SDL_strtol
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3763 * \sa SDL_strtoul
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3764 * \sa SDL_strtoull
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3765 * \sa SDL_strtod
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3766 * \sa SDL_lltoa
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3767 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3768 extern SDL_DECLSPEC long long SDLCALL SDL_strtoll(const char *str, char **endp, int base);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3769
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3770 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3771 * Parse an `unsigned long long` from a string.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3772 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3773 * If `str` starts with whitespace, then those whitespace characters are
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3774 * skipped before attempting to parse the number.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3775 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3776 * If the parsed number does not fit inside an `unsigned long long`, the
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3777 * result is clamped to the maximum representable `unsigned long long` value.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3778 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3779 * \param str The null-terminated string to read. Must not be NULL.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3780 * \param endp If not NULL, the address of the first invalid character (i.e.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3781 * the next character after the parsed number) will be written to
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3782 * this pointer.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3783 * \param base The base of the integer to read. Supported values are 0 and 2
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3784 * to 36 inclusive. If 0, the base will be inferred from the
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3785 * number's prefix (0x for hexadecimal, 0 for octal, decimal
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3786 * otherwise).
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3787 * \returns the parsed `unsigned long long`, or 0 if no number could be
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3788 * parsed.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3789 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3790 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3791 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3792 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3793 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3794 * \sa SDL_atoi
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3795 * \sa SDL_atof
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3796 * \sa SDL_strtol
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3797 * \sa SDL_strtoll
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3798 * \sa SDL_strtoul
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3799 * \sa SDL_strtod
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3800 * \sa SDL_ulltoa
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3801 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3802 extern SDL_DECLSPEC unsigned long long SDLCALL SDL_strtoull(const char *str, char **endp, int base);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3803 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3804
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3805 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3806 * Parse a `double` from a string.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3807 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3808 * This function makes fewer guarantees than the C runtime `strtod`:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3809 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3810 * - Only decimal notation is guaranteed to be supported. The handling of
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3811 * scientific and hexadecimal notation is unspecified.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3812 * - Whether or not INF and NAN can be parsed is unspecified.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3813 * - The precision of the result is unspecified.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3814 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3815 * \param str the null-terminated string to read. Must not be NULL.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3816 * \param endp if not NULL, the address of the first invalid character (i.e.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3817 * the next character after the parsed number) will be written to
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3818 * this pointer.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3819 * \returns the parsed `double`, or 0 if no number could be parsed.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3820 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3821 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3822 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3823 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3824 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3825 * \sa SDL_atoi
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3826 * \sa SDL_atof
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3827 * \sa SDL_strtol
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3828 * \sa SDL_strtoll
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3829 * \sa SDL_strtoul
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3830 * \sa SDL_strtoull
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3831 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3832 extern SDL_DECLSPEC double SDLCALL SDL_strtod(const char *str, char **endp);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3833
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3834 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3835 * Compare two null-terminated UTF-8 strings.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3836 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3837 * Due to the nature of UTF-8 encoding, this will work with Unicode strings,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3838 * since effectively this function just compares bytes until it hits a
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3839 * null-terminating character. Also due to the nature of UTF-8, this can be
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3840 * used with SDL_qsort() to put strings in (roughly) alphabetical order.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3841 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3842 * \param str1 the first string to compare. NULL is not permitted!
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3843 * \param str2 the second string to compare. NULL is not permitted!
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3844 * \returns less than zero if str1 is "less than" str2, greater than zero if
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3845 * str1 is "greater than" str2, and zero if the strings match
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3846 * exactly.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3847 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3848 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3849 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3850 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3851 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3852 extern SDL_DECLSPEC int SDLCALL SDL_strcmp(const char *str1, const char *str2);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3853
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3854 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3855 * Compare two UTF-8 strings up to a number of bytes.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3856 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3857 * Due to the nature of UTF-8 encoding, this will work with Unicode strings,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3858 * since effectively this function just compares bytes until it hits a
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3859 * null-terminating character. Also due to the nature of UTF-8, this can be
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3860 * used with SDL_qsort() to put strings in (roughly) alphabetical order.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3861 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3862 * Note that while this function is intended to be used with UTF-8, it is
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3863 * doing a bytewise comparison, and `maxlen` specifies a _byte_ limit! If the
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3864 * limit lands in the middle of a multi-byte UTF-8 sequence, it will only
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3865 * compare a portion of the final character.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3866 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3867 * `maxlen` specifies a maximum number of bytes to compare; if the strings
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3868 * match to this number of bytes (or both have matched to a null-terminator
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3869 * character before this number of bytes), they will be considered equal.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3870 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3871 * \param str1 the first string to compare. NULL is not permitted!
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3872 * \param str2 the second string to compare. NULL is not permitted!
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3873 * \param maxlen the maximum number of _bytes_ to compare.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3874 * \returns less than zero if str1 is "less than" str2, greater than zero if
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3875 * str1 is "greater than" str2, and zero if the strings match
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3876 * exactly.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3877 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3878 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3879 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3880 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3881 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3882 extern SDL_DECLSPEC int SDLCALL SDL_strncmp(const char *str1, const char *str2, size_t maxlen);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3883
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3884 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3885 * Compare two null-terminated UTF-8 strings, case-insensitively.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3886 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3887 * This will work with Unicode strings, using a technique called
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3888 * "case-folding" to handle the vast majority of case-sensitive human
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3889 * languages regardless of system locale. It can deal with expanding values: a
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3890 * German Eszett character can compare against two ASCII 's' chars and be
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3891 * considered a match, for example. A notable exception: it does not handle
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3892 * the Turkish 'i' character; human language is complicated!
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3893 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3894 * Since this handles Unicode, it expects the string to be well-formed UTF-8
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3895 * and not a null-terminated string of arbitrary bytes. Bytes that are not
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3896 * valid UTF-8 are treated as Unicode character U+FFFD (REPLACEMENT
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3897 * CHARACTER), which is to say two strings of random bits may turn out to
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3898 * match if they convert to the same amount of replacement characters.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3899 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3900 * \param str1 the first string to compare. NULL is not permitted!
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3901 * \param str2 the second string to compare. NULL is not permitted!
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3902 * \returns less than zero if str1 is "less than" str2, greater than zero if
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3903 * str1 is "greater than" str2, and zero if the strings match
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3904 * exactly.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3905 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3906 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3907 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3908 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3909 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3910 extern SDL_DECLSPEC int SDLCALL SDL_strcasecmp(const char *str1, const char *str2);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3911
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3912
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3913 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3914 * Compare two UTF-8 strings, case-insensitively, up to a number of bytes.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3915 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3916 * This will work with Unicode strings, using a technique called
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3917 * "case-folding" to handle the vast majority of case-sensitive human
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3918 * languages regardless of system locale. It can deal with expanding values: a
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3919 * German Eszett character can compare against two ASCII 's' chars and be
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3920 * considered a match, for example. A notable exception: it does not handle
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3921 * the Turkish 'i' character; human language is complicated!
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3922 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3923 * Since this handles Unicode, it expects the string to be well-formed UTF-8
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3924 * and not a null-terminated string of arbitrary bytes. Bytes that are not
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3925 * valid UTF-8 are treated as Unicode character U+FFFD (REPLACEMENT
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3926 * CHARACTER), which is to say two strings of random bits may turn out to
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3927 * match if they convert to the same amount of replacement characters.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3928 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3929 * Note that while this function is intended to be used with UTF-8, `maxlen`
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3930 * specifies a _byte_ limit! If the limit lands in the middle of a multi-byte
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3931 * UTF-8 sequence, it may convert a portion of the final character to one or
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3932 * more Unicode character U+FFFD (REPLACEMENT CHARACTER) so as not to overflow
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3933 * a buffer.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3934 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3935 * `maxlen` specifies a maximum number of bytes to compare; if the strings
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3936 * match to this number of bytes (or both have matched to a null-terminator
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3937 * character before this number of bytes), they will be considered equal.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3938 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3939 * \param str1 the first string to compare. NULL is not permitted!
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3940 * \param str2 the second string to compare. NULL is not permitted!
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3941 * \param maxlen the maximum number of bytes to compare.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3942 * \returns less than zero if str1 is "less than" str2, greater than zero if
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3943 * str1 is "greater than" str2, and zero if the strings match
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3944 * exactly.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3945 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3946 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3947 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3948 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3949 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3950 extern SDL_DECLSPEC int SDLCALL SDL_strncasecmp(const char *str1, const char *str2, size_t maxlen);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3951
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3952 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3953 * Searches a string for the first occurrence of any character contained in a
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3954 * breakset, and returns a pointer from the string to that character.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3955 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3956 * \param str The null-terminated string to be searched. Must not be NULL, and
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3957 * must not overlap with `breakset`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3958 * \param breakset A null-terminated string containing the list of characters
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3959 * to look for. Must not be NULL, and must not overlap with
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3960 * `str`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3961 * \returns A pointer to the location, in str, of the first occurrence of a
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3962 * character present in the breakset, or NULL if none is found.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3963 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3964 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3965 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3966 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3967 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3968 extern SDL_DECLSPEC char * SDLCALL SDL_strpbrk(const char *str, const char *breakset);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3969
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3970 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3971 * The Unicode REPLACEMENT CHARACTER codepoint.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3972 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3973 * SDL_StepUTF8() and SDL_StepBackUTF8() report this codepoint when they
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3974 * encounter a UTF-8 string with encoding errors.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3975 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3976 * This tends to render as something like a question mark in most places.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3977 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3978 * \since This macro is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3979 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3980 * \sa SDL_StepBackUTF8
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3981 * \sa SDL_StepUTF8
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3982 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3983 #define SDL_INVALID_UNICODE_CODEPOINT 0xFFFD
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3984
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3985 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3986 * Decode a UTF-8 string, one Unicode codepoint at a time.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3987 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3988 * This will return the first Unicode codepoint in the UTF-8 encoded string in
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3989 * `*pstr`, and then advance `*pstr` past any consumed bytes before returning.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3990 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3991 * It will not access more than `*pslen` bytes from the string. `*pslen` will
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3992 * be adjusted, as well, subtracting the number of bytes consumed.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3993 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3994 * `pslen` is allowed to be NULL, in which case the string _must_ be
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3995 * NULL-terminated, as the function will blindly read until it sees the NULL
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3996 * char.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3997 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3998 * if `*pslen` is zero, it assumes the end of string is reached and returns a
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3999 * zero codepoint regardless of the contents of the string buffer.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4000 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4001 * If the resulting codepoint is zero (a NULL terminator), or `*pslen` is
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4002 * zero, it will not advance `*pstr` or `*pslen` at all.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4003 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4004 * Generally this function is called in a loop until it returns zero,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4005 * adjusting its parameters each iteration.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4006 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4007 * If an invalid UTF-8 sequence is encountered, this function returns
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4008 * SDL_INVALID_UNICODE_CODEPOINT and advances the string/length by one byte
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4009 * (which is to say, a multibyte sequence might produce several
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4010 * SDL_INVALID_UNICODE_CODEPOINT returns before it syncs to the next valid
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4011 * UTF-8 sequence).
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4012 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4013 * Several things can generate invalid UTF-8 sequences, including overlong
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4014 * encodings, the use of UTF-16 surrogate values, and truncated data. Please
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4015 * refer to
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4016 * [RFC3629](https://www.ietf.org/rfc/rfc3629.txt)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4017 * for details.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4018 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4019 * \param pstr a pointer to a UTF-8 string pointer to be read and adjusted.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4020 * \param pslen a pointer to the number of bytes in the string, to be read and
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4021 * adjusted. NULL is allowed.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4022 * \returns the first Unicode codepoint in the string.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4023 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4024 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4025 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4026 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4027 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4028 extern SDL_DECLSPEC Uint32 SDLCALL SDL_StepUTF8(const char **pstr, size_t *pslen);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4029
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4030 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4031 * Decode a UTF-8 string in reverse, one Unicode codepoint at a time.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4032 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4033 * This will go to the start of the previous Unicode codepoint in the string,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4034 * move `*pstr` to that location and return that codepoint.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4035 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4036 * If `*pstr` is already at the start of the string), it will not advance
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4037 * `*pstr` at all.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4038 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4039 * Generally this function is called in a loop until it returns zero,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4040 * adjusting its parameter each iteration.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4041 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4042 * If an invalid UTF-8 sequence is encountered, this function returns
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4043 * SDL_INVALID_UNICODE_CODEPOINT.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4044 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4045 * Several things can generate invalid UTF-8 sequences, including overlong
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4046 * encodings, the use of UTF-16 surrogate values, and truncated data. Please
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4047 * refer to
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4048 * [RFC3629](https://www.ietf.org/rfc/rfc3629.txt)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4049 * for details.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4050 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4051 * \param start a pointer to the beginning of the UTF-8 string.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4052 * \param pstr a pointer to a UTF-8 string pointer to be read and adjusted.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4053 * \returns the previous Unicode codepoint in the string.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4054 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4055 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4056 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4057 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4058 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4059 extern SDL_DECLSPEC Uint32 SDLCALL SDL_StepBackUTF8(const char *start, const char **pstr);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4060
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4061 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4062 * Convert a single Unicode codepoint to UTF-8.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4063 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4064 * The buffer pointed to by `dst` must be at least 4 bytes long, as this
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4065 * function may generate between 1 and 4 bytes of output.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4066 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4067 * This function returns the first byte _after_ the newly-written UTF-8
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4068 * sequence, which is useful for encoding multiple codepoints in a loop, or
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4069 * knowing where to write a NULL-terminator character to end the string (in
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4070 * either case, plan to have a buffer of _more_ than 4 bytes!).
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4071 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4072 * If `codepoint` is an invalid value (outside the Unicode range, or a UTF-16
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4073 * surrogate value, etc), this will use U+FFFD (REPLACEMENT CHARACTER) for the
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4074 * codepoint instead, and not set an error.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4075 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4076 * If `dst` is NULL, this returns NULL immediately without writing to the
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4077 * pointer and without setting an error.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4078 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4079 * \param codepoint a Unicode codepoint to convert to UTF-8.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4080 * \param dst the location to write the encoded UTF-8. Must point to at least
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4081 * 4 bytes!
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4082 * \returns the first byte past the newly-written UTF-8 sequence.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4083 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4084 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4085 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4086 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4087 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4088 extern SDL_DECLSPEC char * SDLCALL SDL_UCS4ToUTF8(Uint32 codepoint, char *dst);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4089
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4090 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4091 * This works exactly like sscanf() but doesn't require access to a C runtime.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4092 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4093 * Scan a string, matching a format string, converting each '%' item and
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4094 * storing it to pointers provided through variable arguments.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4095 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4096 * \param text the string to scan. Must not be NULL.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4097 * \param fmt a printf-style format string. Must not be NULL.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4098 * \param ... a list of pointers to values to be filled in with scanned items.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4099 * \returns the number of items that matched the format string.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4100 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4101 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4102 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4103 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4104 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4105 extern SDL_DECLSPEC int SDLCALL SDL_sscanf(const char *text, SDL_SCANF_FORMAT_STRING const char *fmt, ...) SDL_SCANF_VARARG_FUNC(2);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4106
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4107 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4108 * This works exactly like vsscanf() but doesn't require access to a C
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4109 * runtime.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4110 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4111 * Functions identically to SDL_sscanf(), except it takes a `va_list` instead
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4112 * of using `...` variable arguments.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4113 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4114 * \param text the string to scan. Must not be NULL.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4115 * \param fmt a printf-style format string. Must not be NULL.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4116 * \param ap a `va_list` of pointers to values to be filled in with scanned
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4117 * items.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4118 * \returns the number of items that matched the format string.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4119 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4120 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4121 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4122 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4123 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4124 extern SDL_DECLSPEC int SDLCALL SDL_vsscanf(const char *text, SDL_SCANF_FORMAT_STRING const char *fmt, va_list ap) SDL_SCANF_VARARG_FUNCV(2);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4125
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4126 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4127 * This works exactly like snprintf() but doesn't require access to a C
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4128 * runtime.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4129 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4130 * Format a string of up to `maxlen`-1 bytes, converting each '%' item with
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4131 * values provided through variable arguments.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4132 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4133 * While some C runtimes differ on how to deal with too-large strings, this
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4134 * function null-terminates the output, by treating the null-terminator as
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4135 * part of the `maxlen` count. Note that if `maxlen` is zero, however, no
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4136 * bytes will be written at all.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4137 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4138 * This function returns the number of _bytes_ (not _characters_) that should
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4139 * be written, excluding the null-terminator character. If this returns a
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4140 * number >= `maxlen`, it means the output string was truncated. A negative
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4141 * return value means an error occurred.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4142 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4143 * Referencing the output string's pointer with a format item is undefined
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4144 * behavior.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4145 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4146 * \param text the buffer to write the string into. Must not be NULL.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4147 * \param maxlen the maximum bytes to write, including the null-terminator.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4148 * \param fmt a printf-style format string. Must not be NULL.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4149 * \param ... a list of values to be used with the format string.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4150 * \returns the number of bytes that should be written, not counting the
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4151 * null-terminator char, or a negative value on error.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4152 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4153 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4154 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4155 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4156 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4157 extern SDL_DECLSPEC int SDLCALL SDL_snprintf(SDL_OUT_Z_CAP(maxlen) char *text, size_t maxlen, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(3);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4158
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4159 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4160 * This works exactly like swprintf() but doesn't require access to a C
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4161 * runtime.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4162 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4163 * Format a wide string of up to `maxlen`-1 wchar_t values, converting each
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4164 * '%' item with values provided through variable arguments.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4165 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4166 * While some C runtimes differ on how to deal with too-large strings, this
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4167 * function null-terminates the output, by treating the null-terminator as
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4168 * part of the `maxlen` count. Note that if `maxlen` is zero, however, no wide
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4169 * characters will be written at all.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4170 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4171 * This function returns the number of _wide characters_ (not _codepoints_)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4172 * that should be written, excluding the null-terminator character. If this
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4173 * returns a number >= `maxlen`, it means the output string was truncated. A
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4174 * negative return value means an error occurred.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4175 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4176 * Referencing the output string's pointer with a format item is undefined
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4177 * behavior.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4178 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4179 * \param text the buffer to write the wide string into. Must not be NULL.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4180 * \param maxlen the maximum wchar_t values to write, including the
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4181 * null-terminator.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4182 * \param fmt a printf-style format string. Must not be NULL.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4183 * \param ... a list of values to be used with the format string.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4184 * \returns the number of wide characters that should be written, not counting
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4185 * the null-terminator char, or a negative value on error.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4186 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4187 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4188 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4189 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4190 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4191 extern SDL_DECLSPEC int SDLCALL SDL_swprintf(SDL_OUT_Z_CAP(maxlen) wchar_t *text, size_t maxlen, SDL_PRINTF_FORMAT_STRING const wchar_t *fmt, ...) SDL_WPRINTF_VARARG_FUNC(3);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4192
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4193 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4194 * This works exactly like vsnprintf() but doesn't require access to a C
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4195 * runtime.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4196 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4197 * Functions identically to SDL_snprintf(), except it takes a `va_list`
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4198 * instead of using `...` variable arguments.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4199 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4200 * \param text the buffer to write the string into. Must not be NULL.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4201 * \param maxlen the maximum bytes to write, including the null-terminator.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4202 * \param fmt a printf-style format string. Must not be NULL.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4203 * \param ap a `va_list` values to be used with the format string.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4204 * \returns the number of bytes that should be written, not counting the
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4205 * null-terminator char, or a negative value on error.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4206 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4207 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4208 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4209 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4210 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4211 extern SDL_DECLSPEC int SDLCALL SDL_vsnprintf(SDL_OUT_Z_CAP(maxlen) char *text, size_t maxlen, SDL_PRINTF_FORMAT_STRING const char *fmt, va_list ap) SDL_PRINTF_VARARG_FUNCV(3);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4212
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4213 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4214 * This works exactly like vswprintf() but doesn't require access to a C
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4215 * runtime.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4216 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4217 * Functions identically to SDL_swprintf(), except it takes a `va_list`
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4218 * instead of using `...` variable arguments.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4219 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4220 * \param text the buffer to write the string into. Must not be NULL.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4221 * \param maxlen the maximum wide characters to write, including the
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4222 * null-terminator.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4223 * \param fmt a printf-style format wide string. Must not be NULL.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4224 * \param ap a `va_list` values to be used with the format string.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4225 * \returns the number of wide characters that should be written, not counting
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4226 * the null-terminator char, or a negative value on error.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4227 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4228 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4229 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4230 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4231 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4232 extern SDL_DECLSPEC int SDLCALL SDL_vswprintf(SDL_OUT_Z_CAP(maxlen) wchar_t *text, size_t maxlen, SDL_PRINTF_FORMAT_STRING const wchar_t *fmt, va_list ap) SDL_WPRINTF_VARARG_FUNCV(3);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4233
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4234 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4235 * This works exactly like asprintf() but doesn't require access to a C
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4236 * runtime.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4237 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4238 * Functions identically to SDL_snprintf(), except it allocates a buffer large
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4239 * enough to hold the output string on behalf of the caller.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4240 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4241 * On success, this function returns the number of bytes (not characters)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4242 * comprising the output string, not counting the null-terminator character,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4243 * and sets `*strp` to the newly-allocated string.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4244 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4245 * On error, this function returns a negative number, and the value of `*strp`
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4246 * is undefined.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4247 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4248 * The returned string is owned by the caller, and should be passed to
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4249 * SDL_free when no longer needed.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4250 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4251 * \param strp on output, is set to the new string. Must not be NULL.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4252 * \param fmt a printf-style format string. Must not be NULL.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4253 * \param ... a list of values to be used with the format string.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4254 * \returns the number of bytes in the newly-allocated string, not counting
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4255 * the null-terminator char, or a negative value on error.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4256 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4257 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4258 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4259 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4260 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4261 extern SDL_DECLSPEC int SDLCALL SDL_asprintf(char **strp, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(2);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4262
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4263 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4264 * This works exactly like vasprintf() but doesn't require access to a C
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4265 * runtime.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4266 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4267 * Functions identically to SDL_asprintf(), except it takes a `va_list`
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4268 * instead of using `...` variable arguments.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4269 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4270 * \param strp on output, is set to the new string. Must not be NULL.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4271 * \param fmt a printf-style format string. Must not be NULL.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4272 * \param ap a `va_list` values to be used with the format string.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4273 * \returns the number of bytes in the newly-allocated string, not counting
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4274 * the null-terminator char, or a negative value on error.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4275 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4276 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4277 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4278 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4279 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4280 extern SDL_DECLSPEC int SDLCALL SDL_vasprintf(char **strp, SDL_PRINTF_FORMAT_STRING const char *fmt, va_list ap) SDL_PRINTF_VARARG_FUNCV(2);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4281
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4282 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4283 * Seeds the pseudo-random number generator.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4284 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4285 * Reusing the seed number will cause SDL_rand() to repeat the same stream of
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4286 * 'random' numbers.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4287 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4288 * \param seed the value to use as a random number seed, or 0 to use
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4289 * SDL_GetPerformanceCounter().
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4290 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4291 * \threadsafety This should be called on the same thread that calls
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4292 * SDL_rand()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4293 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4294 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4295 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4296 * \sa SDL_rand
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4297 * \sa SDL_rand_bits
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4298 * \sa SDL_randf
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4299 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4300 extern SDL_DECLSPEC void SDLCALL SDL_srand(Uint64 seed);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4301
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4302 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4303 * Generate a pseudo-random number less than n for positive n
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4304 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4305 * The method used is faster and of better quality than `rand() % n`. Odds are
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4306 * roughly 99.9% even for n = 1 million. Evenness is better for smaller n, and
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4307 * much worse as n gets bigger.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4308 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4309 * Example: to simulate a d6 use `SDL_rand(6) + 1` The +1 converts 0..5 to
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4310 * 1..6
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4311 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4312 * If you want to generate a pseudo-random number in the full range of Sint32,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4313 * you should use: (Sint32)SDL_rand_bits()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4314 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4315 * If you want reproducible output, be sure to initialize with SDL_srand()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4316 * first.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4317 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4318 * There are no guarantees as to the quality of the random sequence produced,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4319 * and this should not be used for security (cryptography, passwords) or where
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4320 * money is on the line (loot-boxes, casinos). There are many random number
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4321 * libraries available with different characteristics and you should pick one
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4322 * of those to meet any serious needs.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4323 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4324 * \param n the number of possible outcomes. n must be positive.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4325 * \returns a random value in the range of [0 .. n-1].
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4326 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4327 * \threadsafety All calls should be made from a single thread
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4328 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4329 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4330 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4331 * \sa SDL_srand
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4332 * \sa SDL_randf
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4333 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4334 extern SDL_DECLSPEC Sint32 SDLCALL SDL_rand(Sint32 n);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4335
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4336 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4337 * Generate a uniform pseudo-random floating point number less than 1.0
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4338 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4339 * If you want reproducible output, be sure to initialize with SDL_srand()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4340 * first.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4341 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4342 * There are no guarantees as to the quality of the random sequence produced,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4343 * and this should not be used for security (cryptography, passwords) or where
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4344 * money is on the line (loot-boxes, casinos). There are many random number
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4345 * libraries available with different characteristics and you should pick one
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4346 * of those to meet any serious needs.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4347 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4348 * \returns a random value in the range of [0.0, 1.0).
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4349 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4350 * \threadsafety All calls should be made from a single thread
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4351 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4352 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4353 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4354 * \sa SDL_srand
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4355 * \sa SDL_rand
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4356 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4357 extern SDL_DECLSPEC float SDLCALL SDL_randf(void);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4358
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4359 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4360 * Generate 32 pseudo-random bits.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4361 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4362 * You likely want to use SDL_rand() to get a psuedo-random number instead.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4363 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4364 * There are no guarantees as to the quality of the random sequence produced,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4365 * and this should not be used for security (cryptography, passwords) or where
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4366 * money is on the line (loot-boxes, casinos). There are many random number
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4367 * libraries available with different characteristics and you should pick one
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4368 * of those to meet any serious needs.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4369 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4370 * \returns a random value in the range of [0-SDL_MAX_UINT32].
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4371 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4372 * \threadsafety All calls should be made from a single thread
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4373 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4374 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4375 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4376 * \sa SDL_rand
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4377 * \sa SDL_randf
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4378 * \sa SDL_srand
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4379 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4380 extern SDL_DECLSPEC Uint32 SDLCALL SDL_rand_bits(void);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4381
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4382 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4383 * Generate a pseudo-random number less than n for positive n
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4384 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4385 * The method used is faster and of better quality than `rand() % n`. Odds are
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4386 * roughly 99.9% even for n = 1 million. Evenness is better for smaller n, and
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4387 * much worse as n gets bigger.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4388 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4389 * Example: to simulate a d6 use `SDL_rand_r(state, 6) + 1` The +1 converts
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4390 * 0..5 to 1..6
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4391 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4392 * If you want to generate a pseudo-random number in the full range of Sint32,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4393 * you should use: (Sint32)SDL_rand_bits_r(state)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4394 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4395 * There are no guarantees as to the quality of the random sequence produced,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4396 * and this should not be used for security (cryptography, passwords) or where
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4397 * money is on the line (loot-boxes, casinos). There are many random number
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4398 * libraries available with different characteristics and you should pick one
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4399 * of those to meet any serious needs.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4400 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4401 * \param state a pointer to the current random number state, this may not be
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4402 * NULL.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4403 * \param n the number of possible outcomes. n must be positive.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4404 * \returns a random value in the range of [0 .. n-1].
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4405 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4406 * \threadsafety This function is thread-safe, as long as the state pointer
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4407 * isn't shared between threads.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4408 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4409 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4410 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4411 * \sa SDL_rand
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4412 * \sa SDL_rand_bits_r
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4413 * \sa SDL_randf_r
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4414 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4415 extern SDL_DECLSPEC Sint32 SDLCALL SDL_rand_r(Uint64 *state, Sint32 n);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4416
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4417 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4418 * Generate a uniform pseudo-random floating point number less than 1.0
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4419 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4420 * If you want reproducible output, be sure to initialize with SDL_srand()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4421 * first.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4422 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4423 * There are no guarantees as to the quality of the random sequence produced,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4424 * and this should not be used for security (cryptography, passwords) or where
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4425 * money is on the line (loot-boxes, casinos). There are many random number
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4426 * libraries available with different characteristics and you should pick one
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4427 * of those to meet any serious needs.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4428 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4429 * \param state a pointer to the current random number state, this may not be
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4430 * NULL.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4431 * \returns a random value in the range of [0.0, 1.0).
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4432 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4433 * \threadsafety This function is thread-safe, as long as the state pointer
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4434 * isn't shared between threads.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4435 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4436 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4437 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4438 * \sa SDL_rand_bits_r
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4439 * \sa SDL_rand_r
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4440 * \sa SDL_randf
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4441 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4442 extern SDL_DECLSPEC float SDLCALL SDL_randf_r(Uint64 *state);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4443
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4444 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4445 * Generate 32 pseudo-random bits.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4446 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4447 * You likely want to use SDL_rand_r() to get a psuedo-random number instead.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4448 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4449 * There are no guarantees as to the quality of the random sequence produced,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4450 * and this should not be used for security (cryptography, passwords) or where
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4451 * money is on the line (loot-boxes, casinos). There are many random number
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4452 * libraries available with different characteristics and you should pick one
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4453 * of those to meet any serious needs.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4454 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4455 * \param state a pointer to the current random number state, this may not be
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4456 * NULL.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4457 * \returns a random value in the range of [0-SDL_MAX_UINT32].
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4458 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4459 * \threadsafety This function is thread-safe, as long as the state pointer
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4460 * isn't shared between threads.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4461 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4462 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4463 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4464 * \sa SDL_rand_r
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4465 * \sa SDL_randf_r
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4466 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4467 extern SDL_DECLSPEC Uint32 SDLCALL SDL_rand_bits_r(Uint64 *state);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4468
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4469 #ifndef SDL_PI_D
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4470
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4471 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4472 * The value of Pi, as a double-precision floating point literal.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4473 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4474 * \since This macro is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4475 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4476 * \sa SDL_PI_F
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4477 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4478 #define SDL_PI_D 3.141592653589793238462643383279502884 /**< pi (double) */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4479 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4480
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4481 #ifndef SDL_PI_F
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4482
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4483 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4484 * The value of Pi, as a single-precision floating point literal.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4485 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4486 * \since This macro is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4487 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4488 * \sa SDL_PI_D
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4489 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4490 #define SDL_PI_F 3.141592653589793238462643383279502884F /**< pi (float) */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4491 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4492
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4493 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4494 * Compute the arc cosine of `x`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4495 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4496 * The definition of `y = acos(x)` is `x = cos(y)`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4497 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4498 * Domain: `-1 <= x <= 1`
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4499 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4500 * Range: `0 <= y <= Pi`
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4501 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4502 * This function operates on double-precision floating point values, use
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4503 * SDL_acosf for single-precision floats.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4504 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4505 * This function may use a different approximation across different versions,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4506 * platforms and configurations. i.e, it can return a different value given
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4507 * the same input on different machines or operating systems, or if SDL is
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4508 * updated.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4509 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4510 * \param x floating point value.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4511 * \returns arc cosine of `x`, in radians.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4512 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4513 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4514 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4515 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4516 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4517 * \sa SDL_acosf
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4518 * \sa SDL_asin
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4519 * \sa SDL_cos
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4520 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4521 extern SDL_DECLSPEC double SDLCALL SDL_acos(double x);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4522
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4523 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4524 * Compute the arc cosine of `x`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4525 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4526 * The definition of `y = acos(x)` is `x = cos(y)`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4527 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4528 * Domain: `-1 <= x <= 1`
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4529 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4530 * Range: `0 <= y <= Pi`
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4531 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4532 * This function operates on single-precision floating point values, use
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4533 * SDL_acos for double-precision floats.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4534 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4535 * This function may use a different approximation across different versions,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4536 * platforms and configurations. i.e, it can return a different value given
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4537 * the same input on different machines or operating systems, or if SDL is
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4538 * updated.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4539 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4540 * \param x floating point value.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4541 * \returns arc cosine of `x`, in radians.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4542 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4543 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4544 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4545 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4546 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4547 * \sa SDL_acos
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4548 * \sa SDL_asinf
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4549 * \sa SDL_cosf
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4550 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4551 extern SDL_DECLSPEC float SDLCALL SDL_acosf(float x);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4552
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4553 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4554 * Compute the arc sine of `x`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4555 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4556 * The definition of `y = asin(x)` is `x = sin(y)`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4557 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4558 * Domain: `-1 <= x <= 1`
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4559 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4560 * Range: `-Pi/2 <= y <= Pi/2`
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4561 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4562 * This function operates on double-precision floating point values, use
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4563 * SDL_asinf for single-precision floats.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4564 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4565 * This function may use a different approximation across different versions,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4566 * platforms and configurations. i.e, it can return a different value given
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4567 * the same input on different machines or operating systems, or if SDL is
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4568 * updated.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4569 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4570 * \param x floating point value.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4571 * \returns arc sine of `x`, in radians.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4572 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4573 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4574 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4575 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4576 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4577 * \sa SDL_asinf
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4578 * \sa SDL_acos
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4579 * \sa SDL_sin
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4580 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4581 extern SDL_DECLSPEC double SDLCALL SDL_asin(double x);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4582
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4583 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4584 * Compute the arc sine of `x`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4585 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4586 * The definition of `y = asin(x)` is `x = sin(y)`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4587 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4588 * Domain: `-1 <= x <= 1`
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4589 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4590 * Range: `-Pi/2 <= y <= Pi/2`
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4591 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4592 * This function operates on single-precision floating point values, use
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4593 * SDL_asin for double-precision floats.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4594 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4595 * This function may use a different approximation across different versions,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4596 * platforms and configurations. i.e, it can return a different value given
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4597 * the same input on different machines or operating systems, or if SDL is
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4598 * updated.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4599 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4600 * \param x floating point value.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4601 * \returns arc sine of `x`, in radians.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4602 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4603 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4604 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4605 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4606 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4607 * \sa SDL_asin
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4608 * \sa SDL_acosf
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4609 * \sa SDL_sinf
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4610 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4611 extern SDL_DECLSPEC float SDLCALL SDL_asinf(float x);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4612
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4613 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4614 * Compute the arc tangent of `x`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4615 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4616 * The definition of `y = atan(x)` is `x = tan(y)`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4617 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4618 * Domain: `-INF <= x <= INF`
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4619 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4620 * Range: `-Pi/2 <= y <= Pi/2`
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4621 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4622 * This function operates on double-precision floating point values, use
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4623 * SDL_atanf for single-precision floats.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4624 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4625 * To calculate the arc tangent of y / x, use SDL_atan2.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4626 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4627 * This function may use a different approximation across different versions,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4628 * platforms and configurations. i.e, it can return a different value given
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4629 * the same input on different machines or operating systems, or if SDL is
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4630 * updated.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4631 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4632 * \param x floating point value.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4633 * \returns arc tangent of of `x` in radians, or 0 if `x = 0`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4634 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4635 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4636 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4637 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4638 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4639 * \sa SDL_atanf
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4640 * \sa SDL_atan2
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4641 * \sa SDL_tan
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4642 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4643 extern SDL_DECLSPEC double SDLCALL SDL_atan(double x);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4644
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4645 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4646 * Compute the arc tangent of `x`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4647 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4648 * The definition of `y = atan(x)` is `x = tan(y)`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4649 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4650 * Domain: `-INF <= x <= INF`
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4651 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4652 * Range: `-Pi/2 <= y <= Pi/2`
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4653 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4654 * This function operates on single-precision floating point values, use
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4655 * SDL_atan for dboule-precision floats.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4656 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4657 * To calculate the arc tangent of y / x, use SDL_atan2f.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4658 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4659 * This function may use a different approximation across different versions,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4660 * platforms and configurations. i.e, it can return a different value given
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4661 * the same input on different machines or operating systems, or if SDL is
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4662 * updated.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4663 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4664 * \param x floating point value.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4665 * \returns arc tangent of of `x` in radians, or 0 if `x = 0`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4666 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4667 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4668 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4669 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4670 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4671 * \sa SDL_atan
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4672 * \sa SDL_atan2f
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4673 * \sa SDL_tanf
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4674 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4675 extern SDL_DECLSPEC float SDLCALL SDL_atanf(float x);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4676
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4677 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4678 * Compute the arc tangent of `y / x`, using the signs of x and y to adjust
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4679 * the result's quadrant.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4680 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4681 * The definition of `z = atan2(x, y)` is `y = x tan(z)`, where the quadrant
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4682 * of z is determined based on the signs of x and y.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4683 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4684 * Domain: `-INF <= x <= INF`, `-INF <= y <= INF`
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4685 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4686 * Range: `-Pi <= y <= Pi`
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4687 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4688 * This function operates on double-precision floating point values, use
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4689 * SDL_atan2f for single-precision floats.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4690 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4691 * To calculate the arc tangent of a single value, use SDL_atan.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4692 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4693 * This function may use a different approximation across different versions,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4694 * platforms and configurations. i.e, it can return a different value given
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4695 * the same input on different machines or operating systems, or if SDL is
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4696 * updated.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4697 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4698 * \param y floating point value of the numerator (y coordinate).
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4699 * \param x floating point value of the denominator (x coordinate).
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4700 * \returns arc tangent of of `y / x` in radians, or, if `x = 0`, either
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4701 * `-Pi/2`, `0`, or `Pi/2`, depending on the value of `y`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4702 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4703 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4704 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4705 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4706 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4707 * \sa SDL_atan2f
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4708 * \sa SDL_atan
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4709 * \sa SDL_tan
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4710 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4711 extern SDL_DECLSPEC double SDLCALL SDL_atan2(double y, double x);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4712
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4713 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4714 * Compute the arc tangent of `y / x`, using the signs of x and y to adjust
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4715 * the result's quadrant.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4716 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4717 * The definition of `z = atan2(x, y)` is `y = x tan(z)`, where the quadrant
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4718 * of z is determined based on the signs of x and y.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4719 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4720 * Domain: `-INF <= x <= INF`, `-INF <= y <= INF`
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4721 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4722 * Range: `-Pi <= y <= Pi`
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4723 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4724 * This function operates on single-precision floating point values, use
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4725 * SDL_atan2 for double-precision floats.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4726 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4727 * To calculate the arc tangent of a single value, use SDL_atanf.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4728 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4729 * This function may use a different approximation across different versions,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4730 * platforms and configurations. i.e, it can return a different value given
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4731 * the same input on different machines or operating systems, or if SDL is
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4732 * updated.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4733 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4734 * \param y floating point value of the numerator (y coordinate).
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4735 * \param x floating point value of the denominator (x coordinate).
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4736 * \returns arc tangent of of `y / x` in radians, or, if `x = 0`, either
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4737 * `-Pi/2`, `0`, or `Pi/2`, depending on the value of `y`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4738 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4739 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4740 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4741 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4742 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4743 * \sa SDL_atan2
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4744 * \sa SDL_atan
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4745 * \sa SDL_tan
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4746 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4747 extern SDL_DECLSPEC float SDLCALL SDL_atan2f(float y, float x);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4748
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4749 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4750 * Compute the ceiling of `x`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4751 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4752 * The ceiling of `x` is the smallest integer `y` such that `y >= x`, i.e `x`
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4753 * rounded up to the nearest integer.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4754 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4755 * Domain: `-INF <= x <= INF`
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4756 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4757 * Range: `-INF <= y <= INF`, y integer
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4758 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4759 * This function operates on double-precision floating point values, use
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4760 * SDL_ceilf for single-precision floats.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4761 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4762 * \param x floating point value.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4763 * \returns the ceiling of `x`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4764 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4765 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4766 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4767 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4768 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4769 * \sa SDL_ceilf
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4770 * \sa SDL_floor
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4771 * \sa SDL_trunc
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4772 * \sa SDL_round
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4773 * \sa SDL_lround
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4774 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4775 extern SDL_DECLSPEC double SDLCALL SDL_ceil(double x);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4776
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4777 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4778 * Compute the ceiling of `x`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4779 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4780 * The ceiling of `x` is the smallest integer `y` such that `y >= x`, i.e `x`
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4781 * rounded up to the nearest integer.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4782 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4783 * Domain: `-INF <= x <= INF`
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4784 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4785 * Range: `-INF <= y <= INF`, y integer
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4786 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4787 * This function operates on single-precision floating point values, use
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4788 * SDL_ceil for double-precision floats.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4789 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4790 * \param x floating point value.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4791 * \returns the ceiling of `x`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4792 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4793 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4794 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4795 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4796 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4797 * \sa SDL_ceil
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4798 * \sa SDL_floorf
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4799 * \sa SDL_truncf
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4800 * \sa SDL_roundf
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4801 * \sa SDL_lroundf
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4802 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4803 extern SDL_DECLSPEC float SDLCALL SDL_ceilf(float x);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4804
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4805 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4806 * Copy the sign of one floating-point value to another.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4807 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4808 * The definition of copysign is that ``copysign(x, y) = abs(x) * sign(y)``.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4809 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4810 * Domain: `-INF <= x <= INF`, ``-INF <= y <= f``
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4811 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4812 * Range: `-INF <= z <= INF`
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4813 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4814 * This function operates on double-precision floating point values, use
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4815 * SDL_copysignf for single-precision floats.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4816 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4817 * \param x floating point value to use as the magnitude.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4818 * \param y floating point value to use as the sign.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4819 * \returns the floating point value with the sign of y and the magnitude of
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4820 * x.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4821 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4822 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4823 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4824 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4825 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4826 * \sa SDL_copysignf
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4827 * \sa SDL_fabs
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4828 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4829 extern SDL_DECLSPEC double SDLCALL SDL_copysign(double x, double y);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4830
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4831 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4832 * Copy the sign of one floating-point value to another.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4833 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4834 * The definition of copysign is that ``copysign(x, y) = abs(x) * sign(y)``.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4835 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4836 * Domain: `-INF <= x <= INF`, ``-INF <= y <= f``
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4837 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4838 * Range: `-INF <= z <= INF`
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4839 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4840 * This function operates on single-precision floating point values, use
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4841 * SDL_copysign for double-precision floats.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4842 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4843 * \param x floating point value to use as the magnitude.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4844 * \param y floating point value to use as the sign.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4845 * \returns the floating point value with the sign of y and the magnitude of
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4846 * x.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4847 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4848 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4849 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4850 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4851 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4852 * \sa SDL_copysign
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4853 * \sa SDL_fabsf
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4854 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4855 extern SDL_DECLSPEC float SDLCALL SDL_copysignf(float x, float y);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4856
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4857 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4858 * Compute the cosine of `x`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4859 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4860 * Domain: `-INF <= x <= INF`
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4861 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4862 * Range: `-1 <= y <= 1`
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4863 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4864 * This function operates on double-precision floating point values, use
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4865 * SDL_cosf for single-precision floats.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4866 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4867 * This function may use a different approximation across different versions,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4868 * platforms and configurations. i.e, it can return a different value given
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4869 * the same input on different machines or operating systems, or if SDL is
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4870 * updated.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4871 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4872 * \param x floating point value, in radians.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4873 * \returns cosine of `x`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4874 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4875 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4876 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4877 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4878 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4879 * \sa SDL_cosf
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4880 * \sa SDL_acos
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4881 * \sa SDL_sin
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4882 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4883 extern SDL_DECLSPEC double SDLCALL SDL_cos(double x);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4884
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4885 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4886 * Compute the cosine of `x`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4887 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4888 * Domain: `-INF <= x <= INF`
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4889 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4890 * Range: `-1 <= y <= 1`
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4891 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4892 * This function operates on single-precision floating point values, use
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4893 * SDL_cos for double-precision floats.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4894 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4895 * This function may use a different approximation across different versions,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4896 * platforms and configurations. i.e, it can return a different value given
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4897 * the same input on different machines or operating systems, or if SDL is
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4898 * updated.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4899 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4900 * \param x floating point value, in radians.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4901 * \returns cosine of `x`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4902 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4903 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4904 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4905 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4906 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4907 * \sa SDL_cos
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4908 * \sa SDL_acosf
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4909 * \sa SDL_sinf
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4910 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4911 extern SDL_DECLSPEC float SDLCALL SDL_cosf(float x);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4912
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4913 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4914 * Compute the exponential of `x`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4915 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4916 * The definition of `y = exp(x)` is `y = e^x`, where `e` is the base of the
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4917 * natural logarithm. The inverse is the natural logarithm, SDL_log.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4918 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4919 * Domain: `-INF <= x <= INF`
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4920 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4921 * Range: `0 <= y <= INF`
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4922 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4923 * The output will overflow if `exp(x)` is too large to be represented.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4924 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4925 * This function operates on double-precision floating point values, use
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4926 * SDL_expf for single-precision floats.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4927 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4928 * This function may use a different approximation across different versions,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4929 * platforms and configurations. i.e, it can return a different value given
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4930 * the same input on different machines or operating systems, or if SDL is
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4931 * updated.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4932 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4933 * \param x floating point value.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4934 * \returns value of `e^x`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4935 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4936 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4937 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4938 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4939 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4940 * \sa SDL_expf
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4941 * \sa SDL_log
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4942 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4943 extern SDL_DECLSPEC double SDLCALL SDL_exp(double x);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4944
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4945 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4946 * Compute the exponential of `x`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4947 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4948 * The definition of `y = exp(x)` is `y = e^x`, where `e` is the base of the
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4949 * natural logarithm. The inverse is the natural logarithm, SDL_logf.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4950 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4951 * Domain: `-INF <= x <= INF`
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4952 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4953 * Range: `0 <= y <= INF`
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4954 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4955 * The output will overflow if `exp(x)` is too large to be represented.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4956 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4957 * This function operates on single-precision floating point values, use
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4958 * SDL_exp for double-precision floats.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4959 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4960 * This function may use a different approximation across different versions,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4961 * platforms and configurations. i.e, it can return a different value given
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4962 * the same input on different machines or operating systems, or if SDL is
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4963 * updated.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4964 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4965 * \param x floating point value.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4966 * \returns value of `e^x`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4967 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4968 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4969 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4970 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4971 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4972 * \sa SDL_exp
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4973 * \sa SDL_logf
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4974 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4975 extern SDL_DECLSPEC float SDLCALL SDL_expf(float x);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4976
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4977 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4978 * Compute the absolute value of `x`
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4979 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4980 * Domain: `-INF <= x <= INF`
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4981 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4982 * Range: `0 <= y <= INF`
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4983 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4984 * This function operates on double-precision floating point values, use
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4985 * SDL_fabsf for single-precision floats.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4986 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4987 * \param x floating point value to use as the magnitude.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4988 * \returns the absolute value of `x`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4989 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4990 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4991 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4992 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4993 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4994 * \sa SDL_fabsf
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4995 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4996 extern SDL_DECLSPEC double SDLCALL SDL_fabs(double x);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4997
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4998 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4999 * Compute the absolute value of `x`
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5000 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5001 * Domain: `-INF <= x <= INF`
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5002 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5003 * Range: `0 <= y <= INF`
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5004 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5005 * This function operates on single-precision floating point values, use
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5006 * SDL_fabs for double-precision floats.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5007 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5008 * \param x floating point value to use as the magnitude.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5009 * \returns the absolute value of `x`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5010 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5011 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5012 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5013 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5014 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5015 * \sa SDL_fabs
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5016 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5017 extern SDL_DECLSPEC float SDLCALL SDL_fabsf(float x);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5018
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5019 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5020 * Compute the floor of `x`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5021 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5022 * The floor of `x` is the largest integer `y` such that `y <= x`, i.e `x`
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5023 * rounded down to the nearest integer.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5024 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5025 * Domain: `-INF <= x <= INF`
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5026 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5027 * Range: `-INF <= y <= INF`, y integer
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5028 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5029 * This function operates on double-precision floating point values, use
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5030 * SDL_floorf for single-precision floats.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5031 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5032 * \param x floating point value.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5033 * \returns the floor of `x`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5034 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5035 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5036 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5037 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5038 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5039 * \sa SDL_floorf
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5040 * \sa SDL_ceil
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5041 * \sa SDL_trunc
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5042 * \sa SDL_round
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5043 * \sa SDL_lround
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5044 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5045 extern SDL_DECLSPEC double SDLCALL SDL_floor(double x);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5046
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5047 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5048 * Compute the floor of `x`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5049 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5050 * The floor of `x` is the largest integer `y` such that `y <= x`, i.e `x`
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5051 * rounded down to the nearest integer.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5052 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5053 * Domain: `-INF <= x <= INF`
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5054 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5055 * Range: `-INF <= y <= INF`, y integer
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5056 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5057 * This function operates on single-precision floating point values, use
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5058 * SDL_floor for double-precision floats.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5059 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5060 * \param x floating point value.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5061 * \returns the floor of `x`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5062 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5063 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5064 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5065 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5066 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5067 * \sa SDL_floor
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5068 * \sa SDL_ceilf
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5069 * \sa SDL_truncf
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5070 * \sa SDL_roundf
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5071 * \sa SDL_lroundf
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5072 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5073 extern SDL_DECLSPEC float SDLCALL SDL_floorf(float x);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5074
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5075 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5076 * Truncate `x` to an integer.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5077 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5078 * Rounds `x` to the next closest integer to 0. This is equivalent to removing
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5079 * the fractional part of `x`, leaving only the integer part.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5080 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5081 * Domain: `-INF <= x <= INF`
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5082 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5083 * Range: `-INF <= y <= INF`, y integer
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5084 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5085 * This function operates on double-precision floating point values, use
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5086 * SDL_truncf for single-precision floats.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5087 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5088 * \param x floating point value.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5089 * \returns `x` truncated to an integer.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5090 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5091 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5092 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5093 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5094 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5095 * \sa SDL_truncf
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5096 * \sa SDL_fmod
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5097 * \sa SDL_ceil
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5098 * \sa SDL_floor
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5099 * \sa SDL_round
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5100 * \sa SDL_lround
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5101 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5102 extern SDL_DECLSPEC double SDLCALL SDL_trunc(double x);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5103
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5104 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5105 * Truncate `x` to an integer.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5106 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5107 * Rounds `x` to the next closest integer to 0. This is equivalent to removing
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5108 * the fractional part of `x`, leaving only the integer part.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5109 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5110 * Domain: `-INF <= x <= INF`
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5111 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5112 * Range: `-INF <= y <= INF`, y integer
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5113 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5114 * This function operates on single-precision floating point values, use
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5115 * SDL_trunc for double-precision floats.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5116 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5117 * \param x floating point value.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5118 * \returns `x` truncated to an integer.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5119 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5120 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5121 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5122 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5123 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5124 * \sa SDL_trunc
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5125 * \sa SDL_fmodf
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5126 * \sa SDL_ceilf
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5127 * \sa SDL_floorf
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5128 * \sa SDL_roundf
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5129 * \sa SDL_lroundf
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5130 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5131 extern SDL_DECLSPEC float SDLCALL SDL_truncf(float x);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5132
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5133 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5134 * Return the floating-point remainder of `x / y`
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5135 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5136 * Divides `x` by `y`, and returns the remainder.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5137 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5138 * Domain: `-INF <= x <= INF`, `-INF <= y <= INF`, `y != 0`
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5139 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5140 * Range: `-y <= z <= y`
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5141 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5142 * This function operates on double-precision floating point values, use
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5143 * SDL_fmodf for single-precision floats.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5144 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5145 * \param x the numerator.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5146 * \param y the denominator. Must not be 0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5147 * \returns the remainder of `x / y`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5148 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5149 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5150 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5151 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5152 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5153 * \sa SDL_fmodf
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5154 * \sa SDL_modf
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5155 * \sa SDL_trunc
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5156 * \sa SDL_ceil
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5157 * \sa SDL_floor
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5158 * \sa SDL_round
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5159 * \sa SDL_lround
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5160 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5161 extern SDL_DECLSPEC double SDLCALL SDL_fmod(double x, double y);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5162
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5163 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5164 * Return the floating-point remainder of `x / y`
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5165 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5166 * Divides `x` by `y`, and returns the remainder.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5167 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5168 * Domain: `-INF <= x <= INF`, `-INF <= y <= INF`, `y != 0`
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5169 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5170 * Range: `-y <= z <= y`
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5171 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5172 * This function operates on single-precision floating point values, use
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5173 * SDL_fmod for double-precision floats.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5174 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5175 * \param x the numerator.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5176 * \param y the denominator. Must not be 0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5177 * \returns the remainder of `x / y`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5178 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5179 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5180 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5181 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5182 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5183 * \sa SDL_fmod
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5184 * \sa SDL_truncf
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5185 * \sa SDL_modff
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5186 * \sa SDL_ceilf
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5187 * \sa SDL_floorf
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5188 * \sa SDL_roundf
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5189 * \sa SDL_lroundf
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5190 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5191 extern SDL_DECLSPEC float SDLCALL SDL_fmodf(float x, float y);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5192
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5193 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5194 * Return whether the value is infinity.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5195 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5196 * \param x double-precision floating point value.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5197 * \returns non-zero if the value is infinity, 0 otherwise.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5198 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5199 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5200 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5201 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5202 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5203 * \sa SDL_isinff
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5204 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5205 extern SDL_DECLSPEC int SDLCALL SDL_isinf(double x);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5206
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5207 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5208 * Return whether the value is infinity.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5209 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5210 * \param x floating point value.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5211 * \returns non-zero if the value is infinity, 0 otherwise.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5212 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5213 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5214 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5215 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5216 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5217 * \sa SDL_isinf
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5218 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5219 extern SDL_DECLSPEC int SDLCALL SDL_isinff(float x);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5220
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5221 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5222 * Return whether the value is NaN.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5223 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5224 * \param x double-precision floating point value.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5225 * \returns non-zero if the value is NaN, 0 otherwise.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5226 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5227 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5228 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5229 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5230 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5231 * \sa SDL_isnanf
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5232 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5233 extern SDL_DECLSPEC int SDLCALL SDL_isnan(double x);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5234
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5235 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5236 * Return whether the value is NaN.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5237 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5238 * \param x floating point value.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5239 * \returns non-zero if the value is NaN, 0 otherwise.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5240 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5241 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5242 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5243 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5244 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5245 * \sa SDL_isnan
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5246 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5247 extern SDL_DECLSPEC int SDLCALL SDL_isnanf(float x);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5248
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5249 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5250 * Compute the natural logarithm of `x`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5251 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5252 * Domain: `0 < x <= INF`
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5253 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5254 * Range: `-INF <= y <= INF`
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5255 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5256 * It is an error for `x` to be less than or equal to 0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5257 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5258 * This function operates on double-precision floating point values, use
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5259 * SDL_logf for single-precision floats.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5260 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5261 * This function may use a different approximation across different versions,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5262 * platforms and configurations. i.e, it can return a different value given
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5263 * the same input on different machines or operating systems, or if SDL is
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5264 * updated.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5265 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5266 * \param x floating point value. Must be greater than 0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5267 * \returns the natural logarithm of `x`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5268 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5269 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5270 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5271 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5272 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5273 * \sa SDL_logf
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5274 * \sa SDL_log10
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5275 * \sa SDL_exp
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5276 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5277 extern SDL_DECLSPEC double SDLCALL SDL_log(double x);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5278
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5279 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5280 * Compute the natural logarithm of `x`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5281 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5282 * Domain: `0 < x <= INF`
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5283 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5284 * Range: `-INF <= y <= INF`
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5285 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5286 * It is an error for `x` to be less than or equal to 0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5287 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5288 * This function operates on single-precision floating point values, use
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5289 * SDL_log for double-precision floats.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5290 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5291 * This function may use a different approximation across different versions,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5292 * platforms and configurations. i.e, it can return a different value given
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5293 * the same input on different machines or operating systems, or if SDL is
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5294 * updated.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5295 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5296 * \param x floating point value. Must be greater than 0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5297 * \returns the natural logarithm of `x`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5298 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5299 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5300 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5301 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5302 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5303 * \sa SDL_log
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5304 * \sa SDL_expf
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5305 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5306 extern SDL_DECLSPEC float SDLCALL SDL_logf(float x);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5307
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5308 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5309 * Compute the base-10 logarithm of `x`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5310 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5311 * Domain: `0 < x <= INF`
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5312 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5313 * Range: `-INF <= y <= INF`
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5314 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5315 * It is an error for `x` to be less than or equal to 0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5316 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5317 * This function operates on double-precision floating point values, use
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5318 * SDL_log10f for single-precision floats.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5319 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5320 * This function may use a different approximation across different versions,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5321 * platforms and configurations. i.e, it can return a different value given
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5322 * the same input on different machines or operating systems, or if SDL is
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5323 * updated.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5324 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5325 * \param x floating point value. Must be greater than 0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5326 * \returns the logarithm of `x`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5327 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5328 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5329 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5330 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5331 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5332 * \sa SDL_log10f
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5333 * \sa SDL_log
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5334 * \sa SDL_pow
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5335 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5336 extern SDL_DECLSPEC double SDLCALL SDL_log10(double x);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5337
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5338 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5339 * Compute the base-10 logarithm of `x`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5340 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5341 * Domain: `0 < x <= INF`
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5342 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5343 * Range: `-INF <= y <= INF`
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5344 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5345 * It is an error for `x` to be less than or equal to 0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5346 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5347 * This function operates on single-precision floating point values, use
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5348 * SDL_log10 for double-precision floats.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5349 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5350 * This function may use a different approximation across different versions,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5351 * platforms and configurations. i.e, it can return a different value given
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5352 * the same input on different machines or operating systems, or if SDL is
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5353 * updated.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5354 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5355 * \param x floating point value. Must be greater than 0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5356 * \returns the logarithm of `x`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5357 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5358 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5359 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5360 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5361 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5362 * \sa SDL_log10
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5363 * \sa SDL_logf
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5364 * \sa SDL_powf
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5365 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5366 extern SDL_DECLSPEC float SDLCALL SDL_log10f(float x);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5367
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5368 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5369 * Split `x` into integer and fractional parts
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5370 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5371 * This function operates on double-precision floating point values, use
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5372 * SDL_modff for single-precision floats.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5373 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5374 * \param x floating point value.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5375 * \param y output pointer to store the integer part of `x`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5376 * \returns the fractional part of `x`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5377 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5378 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5379 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5380 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5381 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5382 * \sa SDL_modff
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5383 * \sa SDL_trunc
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5384 * \sa SDL_fmod
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5385 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5386 extern SDL_DECLSPEC double SDLCALL SDL_modf(double x, double *y);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5387
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5388 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5389 * Split `x` into integer and fractional parts
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5390 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5391 * This function operates on single-precision floating point values, use
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5392 * SDL_modf for double-precision floats.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5393 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5394 * \param x floating point value.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5395 * \param y output pointer to store the integer part of `x`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5396 * \returns the fractional part of `x`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5397 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5398 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5399 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5400 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5401 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5402 * \sa SDL_modf
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5403 * \sa SDL_truncf
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5404 * \sa SDL_fmodf
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5405 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5406 extern SDL_DECLSPEC float SDLCALL SDL_modff(float x, float *y);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5407
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5408 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5409 * Raise `x` to the power `y`
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5410 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5411 * Domain: `-INF <= x <= INF`, `-INF <= y <= INF`
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5412 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5413 * Range: `-INF <= z <= INF`
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5414 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5415 * If `y` is the base of the natural logarithm (e), consider using SDL_exp
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5416 * instead.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5417 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5418 * This function operates on double-precision floating point values, use
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5419 * SDL_powf for single-precision floats.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5420 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5421 * This function may use a different approximation across different versions,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5422 * platforms and configurations. i.e, it can return a different value given
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5423 * the same input on different machines or operating systems, or if SDL is
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5424 * updated.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5425 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5426 * \param x the base.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5427 * \param y the exponent.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5428 * \returns `x` raised to the power `y`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5429 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5430 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5431 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5432 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5433 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5434 * \sa SDL_powf
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5435 * \sa SDL_exp
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5436 * \sa SDL_log
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5437 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5438 extern SDL_DECLSPEC double SDLCALL SDL_pow(double x, double y);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5439
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5440 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5441 * Raise `x` to the power `y`
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5442 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5443 * Domain: `-INF <= x <= INF`, `-INF <= y <= INF`
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5444 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5445 * Range: `-INF <= z <= INF`
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5446 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5447 * If `y` is the base of the natural logarithm (e), consider using SDL_exp
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5448 * instead.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5449 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5450 * This function operates on single-precision floating point values, use
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5451 * SDL_pow for double-precision floats.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5452 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5453 * This function may use a different approximation across different versions,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5454 * platforms and configurations. i.e, it can return a different value given
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5455 * the same input on different machines or operating systems, or if SDL is
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5456 * updated.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5457 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5458 * \param x the base.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5459 * \param y the exponent.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5460 * \returns `x` raised to the power `y`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5461 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5462 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5463 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5464 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5465 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5466 * \sa SDL_pow
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5467 * \sa SDL_expf
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5468 * \sa SDL_logf
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5469 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5470 extern SDL_DECLSPEC float SDLCALL SDL_powf(float x, float y);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5471
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5472 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5473 * Round `x` to the nearest integer.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5474 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5475 * Rounds `x` to the nearest integer. Values halfway between integers will be
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5476 * rounded away from zero.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5477 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5478 * Domain: `-INF <= x <= INF`
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5479 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5480 * Range: `-INF <= y <= INF`, y integer
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5481 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5482 * This function operates on double-precision floating point values, use
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5483 * SDL_roundf for single-precision floats. To get the result as an integer
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5484 * type, use SDL_lround.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5485 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5486 * \param x floating point value.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5487 * \returns the nearest integer to `x`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5488 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5489 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5490 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5491 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5492 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5493 * \sa SDL_roundf
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5494 * \sa SDL_lround
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5495 * \sa SDL_floor
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5496 * \sa SDL_ceil
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5497 * \sa SDL_trunc
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5498 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5499 extern SDL_DECLSPEC double SDLCALL SDL_round(double x);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5500
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5501 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5502 * Round `x` to the nearest integer.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5503 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5504 * Rounds `x` to the nearest integer. Values halfway between integers will be
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5505 * rounded away from zero.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5506 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5507 * Domain: `-INF <= x <= INF`
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5508 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5509 * Range: `-INF <= y <= INF`, y integer
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5510 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5511 * This function operates on single-precision floating point values, use
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5512 * SDL_round for double-precision floats. To get the result as an integer
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5513 * type, use SDL_lroundf.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5514 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5515 * \param x floating point value.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5516 * \returns the nearest integer to `x`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5517 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5518 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5519 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5520 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5521 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5522 * \sa SDL_round
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5523 * \sa SDL_lroundf
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5524 * \sa SDL_floorf
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5525 * \sa SDL_ceilf
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5526 * \sa SDL_truncf
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5527 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5528 extern SDL_DECLSPEC float SDLCALL SDL_roundf(float x);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5529
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5530 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5531 * Round `x` to the nearest integer representable as a long
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5532 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5533 * Rounds `x` to the nearest integer. Values halfway between integers will be
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5534 * rounded away from zero.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5535 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5536 * Domain: `-INF <= x <= INF`
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5537 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5538 * Range: `MIN_LONG <= y <= MAX_LONG`
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5539 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5540 * This function operates on double-precision floating point values, use
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5541 * SDL_lroundf for single-precision floats. To get the result as a
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5542 * floating-point type, use SDL_round.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5543 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5544 * \param x floating point value.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5545 * \returns the nearest integer to `x`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5546 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5547 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5548 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5549 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5550 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5551 * \sa SDL_lroundf
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5552 * \sa SDL_round
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5553 * \sa SDL_floor
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5554 * \sa SDL_ceil
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5555 * \sa SDL_trunc
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5556 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5557 extern SDL_DECLSPEC long SDLCALL SDL_lround(double x);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5558
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5559 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5560 * Round `x` to the nearest integer representable as a long
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5561 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5562 * Rounds `x` to the nearest integer. Values halfway between integers will be
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5563 * rounded away from zero.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5564 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5565 * Domain: `-INF <= x <= INF`
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5566 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5567 * Range: `MIN_LONG <= y <= MAX_LONG`
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5568 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5569 * This function operates on single-precision floating point values, use
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5570 * SDL_lround for double-precision floats. To get the result as a
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5571 * floating-point type, use SDL_roundf.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5572 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5573 * \param x floating point value.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5574 * \returns the nearest integer to `x`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5575 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5576 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5577 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5578 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5579 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5580 * \sa SDL_lround
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5581 * \sa SDL_roundf
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5582 * \sa SDL_floorf
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5583 * \sa SDL_ceilf
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5584 * \sa SDL_truncf
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5585 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5586 extern SDL_DECLSPEC long SDLCALL SDL_lroundf(float x);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5587
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5588 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5589 * Scale `x` by an integer power of two.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5590 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5591 * Multiplies `x` by the `n`th power of the floating point radix (always 2).
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5592 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5593 * Domain: `-INF <= x <= INF`, `n` integer
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5594 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5595 * Range: `-INF <= y <= INF`
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5596 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5597 * This function operates on double-precision floating point values, use
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5598 * SDL_scalbnf for single-precision floats.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5599 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5600 * \param x floating point value to be scaled.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5601 * \param n integer exponent.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5602 * \returns `x * 2^n`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5603 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5604 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5605 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5606 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5607 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5608 * \sa SDL_scalbnf
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5609 * \sa SDL_pow
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5610 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5611 extern SDL_DECLSPEC double SDLCALL SDL_scalbn(double x, int n);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5612
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5613 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5614 * Scale `x` by an integer power of two.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5615 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5616 * Multiplies `x` by the `n`th power of the floating point radix (always 2).
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5617 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5618 * Domain: `-INF <= x <= INF`, `n` integer
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5619 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5620 * Range: `-INF <= y <= INF`
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5621 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5622 * This function operates on single-precision floating point values, use
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5623 * SDL_scalbn for double-precision floats.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5624 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5625 * \param x floating point value to be scaled.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5626 * \param n integer exponent.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5627 * \returns `x * 2^n`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5628 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5629 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5630 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5631 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5632 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5633 * \sa SDL_scalbn
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5634 * \sa SDL_powf
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5635 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5636 extern SDL_DECLSPEC float SDLCALL SDL_scalbnf(float x, int n);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5637
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5638 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5639 * Compute the sine of `x`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5640 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5641 * Domain: `-INF <= x <= INF`
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5642 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5643 * Range: `-1 <= y <= 1`
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5644 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5645 * This function operates on double-precision floating point values, use
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5646 * SDL_sinf for single-precision floats.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5647 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5648 * This function may use a different approximation across different versions,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5649 * platforms and configurations. i.e, it can return a different value given
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5650 * the same input on different machines or operating systems, or if SDL is
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5651 * updated.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5652 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5653 * \param x floating point value, in radians.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5654 * \returns sine of `x`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5655 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5656 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5657 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5658 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5659 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5660 * \sa SDL_sinf
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5661 * \sa SDL_asin
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5662 * \sa SDL_cos
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5663 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5664 extern SDL_DECLSPEC double SDLCALL SDL_sin(double x);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5665
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5666 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5667 * Compute the sine of `x`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5668 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5669 * Domain: `-INF <= x <= INF`
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5670 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5671 * Range: `-1 <= y <= 1`
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5672 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5673 * This function operates on single-precision floating point values, use
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5674 * SDL_sin for double-precision floats.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5675 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5676 * This function may use a different approximation across different versions,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5677 * platforms and configurations. i.e, it can return a different value given
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5678 * the same input on different machines or operating systems, or if SDL is
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5679 * updated.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5680 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5681 * \param x floating point value, in radians.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5682 * \returns sine of `x`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5683 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5684 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5685 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5686 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5687 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5688 * \sa SDL_sin
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5689 * \sa SDL_asinf
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5690 * \sa SDL_cosf
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5691 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5692 extern SDL_DECLSPEC float SDLCALL SDL_sinf(float x);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5693
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5694 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5695 * Compute the square root of `x`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5696 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5697 * Domain: `0 <= x <= INF`
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5698 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5699 * Range: `0 <= y <= INF`
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5700 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5701 * This function operates on double-precision floating point values, use
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5702 * SDL_sqrtf for single-precision floats.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5703 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5704 * This function may use a different approximation across different versions,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5705 * platforms and configurations. i.e, it can return a different value given
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5706 * the same input on different machines or operating systems, or if SDL is
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5707 * updated.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5708 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5709 * \param x floating point value. Must be greater than or equal to 0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5710 * \returns square root of `x`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5711 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5712 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5713 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5714 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5715 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5716 * \sa SDL_sqrtf
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5717 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5718 extern SDL_DECLSPEC double SDLCALL SDL_sqrt(double x);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5719
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5720 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5721 * Compute the square root of `x`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5722 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5723 * Domain: `0 <= x <= INF`
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5724 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5725 * Range: `0 <= y <= INF`
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5726 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5727 * This function operates on single-precision floating point values, use
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5728 * SDL_sqrt for double-precision floats.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5729 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5730 * This function may use a different approximation across different versions,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5731 * platforms and configurations. i.e, it can return a different value given
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5732 * the same input on different machines or operating systems, or if SDL is
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5733 * updated.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5734 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5735 * \param x floating point value. Must be greater than or equal to 0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5736 * \returns square root of `x`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5737 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5738 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5739 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5740 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5741 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5742 * \sa SDL_sqrt
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5743 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5744 extern SDL_DECLSPEC float SDLCALL SDL_sqrtf(float x);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5745
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5746 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5747 * Compute the tangent of `x`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5748 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5749 * Domain: `-INF <= x <= INF`
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5750 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5751 * Range: `-INF <= y <= INF`
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5752 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5753 * This function operates on double-precision floating point values, use
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5754 * SDL_tanf for single-precision floats.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5755 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5756 * This function may use a different approximation across different versions,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5757 * platforms and configurations. i.e, it can return a different value given
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5758 * the same input on different machines or operating systems, or if SDL is
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5759 * updated.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5760 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5761 * \param x floating point value, in radians.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5762 * \returns tangent of `x`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5763 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5764 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5765 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5766 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5767 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5768 * \sa SDL_tanf
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5769 * \sa SDL_sin
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5770 * \sa SDL_cos
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5771 * \sa SDL_atan
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5772 * \sa SDL_atan2
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5773 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5774 extern SDL_DECLSPEC double SDLCALL SDL_tan(double x);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5775
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5776 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5777 * Compute the tangent of `x`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5778 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5779 * Domain: `-INF <= x <= INF`
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5780 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5781 * Range: `-INF <= y <= INF`
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5782 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5783 * This function operates on single-precision floating point values, use
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5784 * SDL_tan for double-precision floats.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5785 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5786 * This function may use a different approximation across different versions,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5787 * platforms and configurations. i.e, it can return a different value given
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5788 * the same input on different machines or operating systems, or if SDL is
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5789 * updated.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5790 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5791 * \param x floating point value, in radians.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5792 * \returns tangent of `x`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5793 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5794 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5795 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5796 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5797 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5798 * \sa SDL_tan
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5799 * \sa SDL_sinf
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5800 * \sa SDL_cosf
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5801 * \sa SDL_atanf
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5802 * \sa SDL_atan2f
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5803 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5804 extern SDL_DECLSPEC float SDLCALL SDL_tanf(float x);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5805
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5806 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5807 * An opaque handle representing string encoding conversion state.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5808 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5809 * \since This datatype is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5810 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5811 * \sa SDL_iconv_open
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5812 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5813 typedef struct SDL_iconv_data_t *SDL_iconv_t;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5814
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5815 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5816 * This function allocates a context for the specified character set
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5817 * conversion.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5818 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5819 * \param tocode The target character encoding, must not be NULL.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5820 * \param fromcode The source character encoding, must not be NULL.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5821 * \returns a handle that must be freed with SDL_iconv_close, or
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5822 * SDL_ICONV_ERROR on failure.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5823 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5824 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5825 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5826 * \sa SDL_iconv
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5827 * \sa SDL_iconv_close
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5828 * \sa SDL_iconv_string
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5829 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5830 extern SDL_DECLSPEC SDL_iconv_t SDLCALL SDL_iconv_open(const char *tocode,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5831 const char *fromcode);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5832
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5833 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5834 * This function frees a context used for character set conversion.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5835 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5836 * \param cd The character set conversion handle.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5837 * \returns 0 on success, or -1 on failure.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5838 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5839 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5840 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5841 * \sa SDL_iconv
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5842 * \sa SDL_iconv_open
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5843 * \sa SDL_iconv_string
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5844 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5845 extern SDL_DECLSPEC int SDLCALL SDL_iconv_close(SDL_iconv_t cd);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5846
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5847 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5848 * This function converts text between encodings, reading from and writing to
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5849 * a buffer.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5850 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5851 * It returns the number of successful conversions on success. On error,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5852 * SDL_ICONV_E2BIG is returned when the output buffer is too small, or
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5853 * SDL_ICONV_EILSEQ is returned when an invalid input sequence is encountered,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5854 * or SDL_ICONV_EINVAL is returned when an incomplete input sequence is
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5855 * encountered.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5856 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5857 * On exit:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5858 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5859 * - inbuf will point to the beginning of the next multibyte sequence. On
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5860 * error, this is the location of the problematic input sequence. On
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5861 * success, this is the end of the input sequence.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5862 * - inbytesleft will be set to the number of bytes left to convert, which
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5863 * will be 0 on success.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5864 * - outbuf will point to the location where to store the next output byte.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5865 * - outbytesleft will be set to the number of bytes left in the output
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5866 * buffer.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5867 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5868 * \param cd The character set conversion context, created in
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5869 * SDL_iconv_open().
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5870 * \param inbuf Address of variable that points to the first character of the
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5871 * input sequence.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5872 * \param inbytesleft The number of bytes in the input buffer.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5873 * \param outbuf Address of variable that points to the output buffer.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5874 * \param outbytesleft The number of bytes in the output buffer.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5875 * \returns the number of conversions on success, or a negative error code.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5876 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5877 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5878 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5879 * \sa SDL_iconv_open
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5880 * \sa SDL_iconv_close
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5881 * \sa SDL_iconv_string
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5882 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5883 extern SDL_DECLSPEC size_t SDLCALL SDL_iconv(SDL_iconv_t cd, const char **inbuf,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5884 size_t *inbytesleft, char **outbuf,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5885 size_t *outbytesleft);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5886
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5887 #define SDL_ICONV_ERROR (size_t)-1 /**< Generic error. Check SDL_GetError()? */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5888 #define SDL_ICONV_E2BIG (size_t)-2 /**< Output buffer was too small. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5889 #define SDL_ICONV_EILSEQ (size_t)-3 /**< Invalid input sequence was encountered. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5890 #define SDL_ICONV_EINVAL (size_t)-4 /**< Incomplete input sequence was encountered. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5891
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5892
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5893 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5894 * Helper function to convert a string's encoding in one call.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5895 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5896 * This function converts a buffer or string between encodings in one pass.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5897 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5898 * The string does not need to be NULL-terminated; this function operates on
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5899 * the number of bytes specified in `inbytesleft` whether there is a NULL
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5900 * character anywhere in the buffer.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5901 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5902 * The returned string is owned by the caller, and should be passed to
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5903 * SDL_free when no longer needed.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5904 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5905 * \param tocode the character encoding of the output string. Examples are
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5906 * "UTF-8", "UCS-4", etc.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5907 * \param fromcode the character encoding of data in `inbuf`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5908 * \param inbuf the string to convert to a different encoding.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5909 * \param inbytesleft the size of the input string _in bytes_.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5910 * \returns a new string, converted to the new encoding, or NULL on error.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5911 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5912 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5913 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5914 * \sa SDL_iconv_open
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5915 * \sa SDL_iconv_close
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5916 * \sa SDL_iconv
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5917 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5918 extern SDL_DECLSPEC char * SDLCALL SDL_iconv_string(const char *tocode,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5919 const char *fromcode,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5920 const char *inbuf,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5921 size_t inbytesleft);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5922
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5923 /* Some helper macros for common SDL_iconv_string cases... */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5924
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5925 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5926 * Convert a UTF-8 string to the current locale's character encoding.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5927 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5928 * This is a helper macro that might be more clear than calling
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5929 * SDL_iconv_string directly. However, it double-evaluates its parameter, so
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5930 * do not use an expression with side-effects here.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5931 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5932 * \param S the string to convert.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5933 * \returns a new string, converted to the new encoding, or NULL on error.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5934 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5935 * \since This macro is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5936 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5937 #define SDL_iconv_utf8_locale(S) SDL_iconv_string("", "UTF-8", S, SDL_strlen(S)+1)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5938
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5939 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5940 * Convert a UTF-8 string to UCS-2.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5941 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5942 * This is a helper macro that might be more clear than calling
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5943 * SDL_iconv_string directly. However, it double-evaluates its parameter, so
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5944 * do not use an expression with side-effects here.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5945 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5946 * \param S the string to convert.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5947 * \returns a new string, converted to the new encoding, or NULL on error.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5948 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5949 * \since This macro is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5950 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5951 #define SDL_iconv_utf8_ucs2(S) SDL_reinterpret_cast(Uint16 *, SDL_iconv_string("UCS-2", "UTF-8", S, SDL_strlen(S)+1))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5952
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5953 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5954 * Convert a UTF-8 string to UCS-4.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5955 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5956 * This is a helper macro that might be more clear than calling
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5957 * SDL_iconv_string directly. However, it double-evaluates its parameter, so
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5958 * do not use an expression with side-effects here.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5959 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5960 * \param S the string to convert.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5961 * \returns a new string, converted to the new encoding, or NULL on error.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5962 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5963 * \since This macro is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5964 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5965 #define SDL_iconv_utf8_ucs4(S) SDL_reinterpret_cast(Uint32 *, SDL_iconv_string("UCS-4", "UTF-8", S, SDL_strlen(S)+1))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5966
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5967 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5968 * Convert a wchar_t string to UTF-8.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5969 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5970 * This is a helper macro that might be more clear than calling
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5971 * SDL_iconv_string directly. However, it double-evaluates its parameter, so
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5972 * do not use an expression with side-effects here.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5973 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5974 * \param S the string to convert.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5975 * \returns a new string, converted to the new encoding, or NULL on error.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5976 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5977 * \since This macro is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5978 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5979 #define SDL_iconv_wchar_utf8(S) SDL_iconv_string("UTF-8", "WCHAR_T", SDL_reinterpret_cast(const char *, S), (SDL_wcslen(S)+1)*sizeof(wchar_t))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5980
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5981
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5982 /* force builds using Clang's static analysis tools to use literal C runtime
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5983 here, since there are possibly tests that are ineffective otherwise. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5984 #if defined(__clang_analyzer__) && !defined(SDL_DISABLE_ANALYZE_MACROS)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5985
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5986 /* The analyzer knows about strlcpy even when the system doesn't provide it */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5987 #if !defined(HAVE_STRLCPY) && !defined(strlcpy)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5988 size_t strlcpy(char *dst, const char *src, size_t size);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5989 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5990
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5991 /* The analyzer knows about strlcat even when the system doesn't provide it */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5992 #if !defined(HAVE_STRLCAT) && !defined(strlcat)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5993 size_t strlcat(char *dst, const char *src, size_t size);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5994 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5995
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5996 #if !defined(HAVE_WCSLCPY) && !defined(wcslcpy)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5997 size_t wcslcpy(wchar_t *dst, const wchar_t *src, size_t size);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5998 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5999
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6000 #if !defined(HAVE_WCSLCAT) && !defined(wcslcat)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6001 size_t wcslcat(wchar_t *dst, const wchar_t *src, size_t size);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6002 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6003
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6004 #if !defined(HAVE_STRTOK_R) && !defined(strtok_r)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6005 char *strtok_r(char *str, const char *delim, char **saveptr);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6006 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6007
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6008 #ifndef _WIN32
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6009 /* strdup is not ANSI but POSIX, and its prototype might be hidden... */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6010 /* not for windows: might conflict with string.h where strdup may have
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6011 * dllimport attribute: https://github.com/libsdl-org/SDL/issues/12948 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6012 char *strdup(const char *str);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6013 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6014
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6015 /* Starting LLVM 16, the analyser errors out if these functions do not have
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6016 their prototype defined (clang-diagnostic-implicit-function-declaration) */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6017 #include <stdio.h>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6018 #include <stdlib.h>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6019
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6020 #define SDL_malloc malloc
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6021 #define SDL_calloc calloc
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6022 #define SDL_realloc realloc
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6023 #define SDL_free free
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6024 #ifndef SDL_memcpy
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6025 #define SDL_memcpy memcpy
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6026 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6027 #ifndef SDL_memmove
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6028 #define SDL_memmove memmove
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6029 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6030 #ifndef SDL_memset
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6031 #define SDL_memset memset
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6032 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6033 #define SDL_memcmp memcmp
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6034 #define SDL_strlcpy strlcpy
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6035 #define SDL_strlcat strlcat
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6036 #define SDL_strlen strlen
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6037 #define SDL_wcslen wcslen
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6038 #define SDL_wcslcpy wcslcpy
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6039 #define SDL_wcslcat wcslcat
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6040 #define SDL_strdup strdup
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6041 #define SDL_wcsdup wcsdup
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6042 #define SDL_strchr strchr
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6043 #define SDL_strrchr strrchr
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6044 #define SDL_strstr strstr
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6045 #define SDL_wcsstr wcsstr
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6046 #define SDL_strtok_r strtok_r
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6047 #define SDL_strcmp strcmp
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6048 #define SDL_wcscmp wcscmp
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6049 #define SDL_strncmp strncmp
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6050 #define SDL_wcsncmp wcsncmp
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6051 #define SDL_strcasecmp strcasecmp
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6052 #define SDL_strncasecmp strncasecmp
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6053 #define SDL_strpbrk strpbrk
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6054 #define SDL_sscanf sscanf
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6055 #define SDL_vsscanf vsscanf
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6056 #define SDL_snprintf snprintf
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6057 #define SDL_vsnprintf vsnprintf
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6058 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6059
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6060 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6061 * Multiply two integers, checking for overflow.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6062 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6063 * If `a * b` would overflow, return false.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6064 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6065 * Otherwise store `a * b` via ret and return true.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6066 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6067 * \param a the multiplicand.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6068 * \param b the multiplier.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6069 * \param ret on non-overflow output, stores the multiplication result, may
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6070 * not be NULL.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6071 * \returns false on overflow, true if result is multiplied without overflow.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6072 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6073 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6074 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6075 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6076 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6077 SDL_FORCE_INLINE bool SDL_size_mul_check_overflow(size_t a, size_t b, size_t *ret)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6078 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6079 if (a != 0 && b > SDL_SIZE_MAX / a) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6080 return false;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6081 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6082 *ret = a * b;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6083 return true;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6084 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6085
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6086 #ifndef SDL_WIKI_DOCUMENTATION_SECTION
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6087 #if SDL_HAS_BUILTIN(__builtin_mul_overflow)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6088 /* This needs to be wrapped in an inline rather than being a direct #define,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6089 * because __builtin_mul_overflow() is type-generic, but we want to be
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6090 * consistent about interpreting a and b as size_t. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6091 SDL_FORCE_INLINE bool SDL_size_mul_check_overflow_builtin(size_t a, size_t b, size_t *ret)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6092 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6093 return (__builtin_mul_overflow(a, b, ret) == 0);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6094 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6095 #define SDL_size_mul_check_overflow(a, b, ret) SDL_size_mul_check_overflow_builtin(a, b, ret)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6096 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6097 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6098
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6099 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6100 * Add two integers, checking for overflow.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6101 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6102 * If `a + b` would overflow, return false.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6103 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6104 * Otherwise store `a + b` via ret and return true.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6105 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6106 * \param a the first addend.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6107 * \param b the second addend.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6108 * \param ret on non-overflow output, stores the addition result, may not be
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6109 * NULL.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6110 * \returns false on overflow, true if result is added without overflow.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6111 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6112 * \threadsafety It is safe to call this function from any thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6113 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6114 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6115 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6116 SDL_FORCE_INLINE bool SDL_size_add_check_overflow(size_t a, size_t b, size_t *ret)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6117 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6118 if (b > SDL_SIZE_MAX - a) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6119 return false;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6120 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6121 *ret = a + b;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6122 return true;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6123 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6124
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6125 #ifndef SDL_WIKI_DOCUMENTATION_SECTION
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6126 #if SDL_HAS_BUILTIN(__builtin_add_overflow)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6127 /* This needs to be wrapped in an inline rather than being a direct #define,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6128 * the same as the call to __builtin_mul_overflow() above. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6129 SDL_FORCE_INLINE bool SDL_size_add_check_overflow_builtin(size_t a, size_t b, size_t *ret)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6130 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6131 return (__builtin_add_overflow(a, b, ret) == 0);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6132 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6133 #define SDL_size_add_check_overflow(a, b, ret) SDL_size_add_check_overflow_builtin(a, b, ret)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6134 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6135 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6136
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6137 /* This is a generic function pointer which should be cast to the type you expect */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6138 #ifdef SDL_WIKI_DOCUMENTATION_SECTION
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6139
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6140 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6141 * A generic function pointer.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6142 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6143 * In theory, generic function pointers should use this, instead of `void *`,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6144 * since some platforms could treat code addresses differently than data
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6145 * addresses. Although in current times no popular platforms make this
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6146 * distinction, it is more correct and portable to use the correct type for a
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6147 * generic pointer.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6148 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6149 * If for some reason you need to force this typedef to be an actual `void *`,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6150 * perhaps to work around a compiler or existing code, you can define
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6151 * `SDL_FUNCTION_POINTER_IS_VOID_POINTER` before including any SDL headers.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6152 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6153 * \since This datatype is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6154 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6155 typedef void (*SDL_FunctionPointer)(void);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6156 #elif defined(SDL_FUNCTION_POINTER_IS_VOID_POINTER)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6157 typedef void *SDL_FunctionPointer;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6158 #else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6159 typedef void (*SDL_FunctionPointer)(void);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6160 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6161
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6162 /* Ends C function definitions when using C++ */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6163 #ifdef __cplusplus
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6164 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6165 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6166 #include <SDL3/SDL_close_code.h>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6167
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6168 #endif /* SDL_stdinc_h_ */