SDL3pp
A slim C++ wrapper for SDL3
Loading...
Searching...
No Matches
SDL3pp_stdinc.h
1#ifndef SDL3PP_STDINC_H_
2#define SDL3PP_STDINC_H_
3
4#include <chrono>
5#include <SDL3/SDL_stdinc.h>
6#include "SDL3pp_callbackWrapper.h"
7#include "SDL3pp_error.h"
8#include "SDL3pp_optionalRef.h"
9#include "SDL3pp_ownPtr.h"
10#include "SDL3pp_spanRef.h"
11#include "SDL3pp_strings.h"
12
13namespace SDL {
14
41using TimeRaw = SDL_Time;
42
43// Forward decl
44struct Time;
45
46// Forward decl
47struct Environment;
48
50using EnvironmentRaw = SDL_Environment*;
51
52// Forward decl
53struct EnvironmentRef;
54
57{
59
62 : value(value)
63 {
64 }
65
67 constexpr EnvironmentParam(std::nullptr_t _ = nullptr)
68 : value(nullptr)
69 {
70 }
71
73 constexpr explicit operator bool() const { return !!value; }
74
76 constexpr auto operator<=>(const EnvironmentParam& other) const = default;
77
79 constexpr operator EnvironmentRaw() const { return value; }
80};
81
82// Forward decl
83struct IConv;
84
86using IConvRaw = SDL_iconv_t;
87
88// Forward decl
89struct IConvRef;
90
93{
95
98 : value(value)
99 {
100 }
101
103 constexpr IConvParam(std::nullptr_t _ = nullptr)
104 : value(nullptr)
105 {
106 }
107
109 constexpr explicit operator bool() const { return !!value; }
110
112 constexpr auto operator<=>(const IConvParam& other) const = default;
113
115 constexpr operator IConvRaw() const { return value; }
116};
117
118#ifdef SDL3PP_DOC
119
136#define SDL_NOLONGLONG 1
137
152#define SDL_SIZE_MAX SIZE_MAX
153
185#define SDL_COMPILE_TIME_ASSERT(name, x) FailToCompileIf_x_IsFalse(x)
186
187#endif // SDL3PP_DOC
188
197template<class T, std::size_t N>
198constexpr std::size_t arraysize(const T (&array)[N])
199{
200 return SDL_arraysize(array);
201}
202
203#ifdef SDL3PP_DOC
204
219#define SDL_STRINGIFY_ARG(arg) #arg
220
221#endif // SDL3PP_DOC
222
236constexpr Uint32 FourCC(Uint8 a, Uint8 b, Uint8 c, Uint8 d)
237{
238 return SDL_FOURCC(a, b, c, d);
239}
240
241#ifdef SDL3PP_DOC
242
254#define SDL_SINT64_C(c) c##LL /* or whatever the current compiler uses. */
255
267#define SDL_UINT64_C(c) c##ULL /* or whatever the current compiler uses. */
268
269#endif // SDL3PP_DOC
270
277
279constexpr Sint8 MAX_SINT8 = SDL_MAX_SINT8;
280
282constexpr Sint8 MIN_SINT8 = SDL_MIN_SINT8;
283
290
292constexpr Uint8 MAX_UINT8 = SDL_MAX_UINT8;
293
295constexpr Uint8 MIN_UINT8 = SDL_MIN_UINT8;
296
303
305constexpr Sint16 MAX_SINT16 = SDL_MAX_SINT16;
306
308constexpr Sint16 MIN_SINT16 = SDL_MIN_SINT16;
309
316
318constexpr Uint16 MAX_UINT16 = SDL_MAX_UINT16;
319
321constexpr Uint16 MIN_UINT16 = SDL_MIN_UINT16;
322
329
331constexpr Sint32 MAX_SINT32 = SDL_MAX_SINT32;
332
334constexpr Sint32 MIN_SINT32 = SDL_MIN_SINT32;
335
342
344constexpr Uint32 MAX_UINT32 = SDL_MAX_UINT32;
345
347constexpr Uint8 MIN_UINT32 = SDL_MIN_UINT32;
348
357
359constexpr Sint64 MAX_SINT64 = SDL_MAX_SINT64;
360
362constexpr Sint64 MIN_SINT64 = SDL_MIN_SINT64;
363
372
374constexpr Uint64 MAX_UINT64 = SDL_MAX_UINT64;
375
377constexpr Uint8 MIN_UINT64 = SDL_MIN_UINT64;
378
380using Seconds = std::chrono::duration<float>;
381
383using Nanoseconds = std::chrono::nanoseconds;
384
386using Milliseconds = std::chrono::milliseconds;
387
389constexpr float ToSeconds(Seconds duration) { return duration.count(); }
390
392constexpr Seconds FromSeconds(float duration) { return Seconds(duration); }
393
395constexpr Sint64 ToNS(Nanoseconds duration) { return duration.count(); }
396
398constexpr Nanoseconds FromNS(Sint64 duration) { return Nanoseconds{duration}; }
399
413class Time
414{
415 Nanoseconds m_time;
416
417public:
418 constexpr Time() = default;
419
425 constexpr explicit Time(TimeRaw time) noexcept
426 : m_time(time)
427 {
428 }
429
435 constexpr Time(std::chrono::nanoseconds time) noexcept
436 : m_time(time)
437 {
438 }
439
441 constexpr explicit operator bool() const
442 {
443 return m_time != std::chrono::nanoseconds{};
444 }
445
447 constexpr operator std::chrono::nanoseconds() const { return m_time; }
448
457 static Time Current();
458
460 static constexpr Time FromNS(Sint64 time)
461 {
462 return Time{std::chrono::nanoseconds{time}};
463 }
464
466 constexpr Sint64 ToNS() const { return m_time.count(); }
467
480 static constexpr Time FromPosix(Sint64 time);
481
493 constexpr Sint64 ToPosix() const;
494
508 static Time FromWindows(Uint32 dwLowDateTime, Uint32 dwHighDateTime);
509
523 void ToWindows(Uint32* dwLowDateTime, Uint32* dwHighDateTime) const;
524
526 constexpr float ToSeconds() const { return Seconds(m_time).count(); }
527
529 static constexpr Time FromSeconds(float interval)
530 {
531 return std::chrono::duration_cast<std::chrono::nanoseconds>(
532 Seconds(interval));
533 }
534
536 constexpr Time& operator+=(std::chrono::nanoseconds interval)
537 {
538 m_time += interval;
539 return *this;
540 }
541
543 constexpr Time& operator-=(std::chrono::nanoseconds interval)
544 {
545 m_time -= interval;
546 return *this;
547 }
548};
549
551constexpr Time MAX_TIME = Time::FromNS(SDL_MAX_TIME);
552
554constexpr Time MIN_TIME = Time::FromNS(SDL_MIN_TIME);
555
564constexpr float FLT_EPSILON = SDL_FLT_EPSILON;
565
571template<class I>
572concept Interface = requires(I* iface) { (iface)->version = sizeof(I); };
573
612template<Interface I>
613constexpr void InitInterface(I* iface)
614{
615 SDL_INIT_INTERFACE(iface);
616}
617
643inline void* malloc(size_t size) { return SDL_malloc(size); }
644
668inline void* calloc(size_t nmemb, size_t size)
669{
670 return SDL_calloc(nmemb, size);
671}
672
709inline void* realloc(void* mem, size_t size) { return SDL_realloc(mem, size); }
710
729inline void free(void* mem) { SDL_free(mem); }
730
748using malloc_func = void*(SDLCALL*)(size_t size);
749
769using calloc_func = void*(SDLCALL*)(size_t nmemb, size_t size);
770
790using realloc_func = void*(SDLCALL*)(void* mem, size_t size);
791
808using free_func = void(SDLCALL*)(void* mem);
809
831{
832 SDL_GetOriginalMemoryFunctions(
834}
835
857{
858 SDL_GetMemoryFunctions(malloc_func, calloc_func, realloc_func, free_func);
859}
860
890{
892 SDL_SetMemoryFunctions(malloc_func, calloc_func, realloc_func, free_func));
893}
894
917inline void* aligned_alloc(size_t alignment, size_t size)
918{
919 return SDL_aligned_alloc(alignment, size);
920}
921
938inline void aligned_free(void* mem) { SDL_aligned_free(mem); }
939
949inline int GetNumAllocations() { return SDL_GetNumAllocations(); }
950
967{
968 EnvironmentRaw m_resource = nullptr;
969
970public:
972 constexpr Environment(std::nullptr_t = nullptr) noexcept
973 : m_resource(0)
974 {
975 }
976
984 constexpr explicit Environment(const EnvironmentRaw resource) noexcept
985 : m_resource(resource)
986 {
987 }
988
990 constexpr Environment(const Environment& other) = delete;
991
993 constexpr Environment(Environment&& other) noexcept
994 : Environment(other.release())
995 {
996 }
997
998 constexpr Environment(const EnvironmentRef& other) = delete;
999
1000 constexpr Environment(EnvironmentRef&& other) = delete;
1001
1022 Environment(bool populated)
1023 : m_resource(SDL_CreateEnvironment(populated))
1024 {
1025 }
1026
1028 ~Environment() { SDL_DestroyEnvironment(m_resource); }
1029
1031 constexpr Environment& operator=(Environment&& other) noexcept
1032 {
1033 std::swap(m_resource, other.m_resource);
1034 return *this;
1035 }
1036
1037protected:
1039 constexpr Environment& operator=(const Environment& other) noexcept = default;
1040
1041public:
1043 constexpr EnvironmentRaw get() const noexcept { return m_resource; }
1044
1046 constexpr EnvironmentRaw release() noexcept
1047 {
1048 auto r = m_resource;
1049 m_resource = nullptr;
1050 return r;
1051 }
1052
1054 constexpr auto operator<=>(const Environment& other) const noexcept = default;
1055
1057 constexpr explicit operator bool() const noexcept { return !!m_resource; }
1058
1060 constexpr operator EnvironmentParam() const noexcept { return {m_resource}; }
1061
1072 void Destroy();
1073
1091 const char* GetVariable(StringParam name);
1092
1113
1122 {
1123 Uint64 count = 0;
1124 for (auto& var : GetVariables()) count += 1;
1125 return count;
1126 }
1127
1148 void SetVariable(StringParam name, StringParam value, bool overwrite);
1149
1167 void UnsetVariable(StringParam name);
1168};
1169
1172{
1174
1183 : Environment(resource.value)
1184 {
1185 }
1186
1195 : Environment(resource)
1196 {
1197 }
1198
1200 EnvironmentRef(const EnvironmentRef& other) noexcept
1201 : Environment(other.get())
1202 {
1203 }
1204
1207};
1208
1230inline EnvironmentRaw GetEnvironment() { return SDL_GetEnvironment(); }
1231
1252inline Environment CreateEnvironment(bool populated)
1253{
1254 return Environment(populated);
1255}
1256
1276 StringParam name)
1277{
1278 return SDL_GetEnvironmentVariable(env, name);
1279}
1280
1282{
1283 return SDL::GetEnvironmentVariable(m_resource, std::move(name));
1284}
1285
1306{
1307 return OwnArray<char*>{CheckError(SDL_GetEnvironmentVariables(env))};
1308}
1309
1311{
1312 return SDL::GetEnvironmentVariables(m_resource);
1313}
1314
1336 StringParam name,
1337 StringParam value,
1338 bool overwrite)
1339{
1340 CheckError(SDL_SetEnvironmentVariable(env, name, value, overwrite));
1341}
1342
1344 StringParam value,
1345 bool overwrite)
1346{
1348 m_resource, std::move(name), std::move(value), overwrite);
1349}
1350
1370{
1371 CheckError(SDL_UnsetEnvironmentVariable(env, name));
1372}
1373
1375{
1376 SDL::UnsetEnvironmentVariable(m_resource, std::move(name));
1377}
1378
1392{
1393 SDL_DestroyEnvironment(env);
1394}
1395
1397
1411inline const char* getenv(StringParam name) { return SDL_getenv(name); }
1412
1430inline const char* getenv_unsafe(StringParam name)
1431{
1432 return SDL_getenv_unsafe(name);
1433}
1434
1451inline int setenv_unsafe(StringParam name, StringParam value, int overwrite)
1452{
1453 return SDL_setenv_unsafe(name, value, overwrite);
1454}
1455
1470{
1471 return SDL_unsetenv_unsafe(name);
1472}
1473
1488using CompareCallback = int(SDLCALL*)(const void* a, const void* b);
1489
1534inline void qsort(void* base,
1535 size_t nmemb,
1536 size_t size,
1537 CompareCallback compare)
1538{
1539 SDL_qsort(base, nmemb, size, compare);
1540}
1541
1591inline void* bsearch(const void* key,
1592 const void* base,
1593 size_t nmemb,
1594 size_t size,
1595 CompareCallback compare)
1596{
1597 return SDL_bsearch(key, base, nmemb, size, compare);
1598}
1599
1615using CompareCallback_r = int(SDLCALL*)(void* userdata,
1616 const void* a,
1617 const void* b);
1618
1634using CompareCB = std::function<int(const void* a, const void* b)>;
1635
1688inline void qsort_r(void* base,
1689 size_t nmemb,
1690 size_t size,
1691 CompareCallback_r compare,
1692 void* userdata)
1693{
1694 SDL_qsort_r(base, nmemb, size, compare, userdata);
1695}
1696
1748inline void qsort_r(void* base, size_t nmemb, size_t size, CompareCB compare)
1749{
1750 return qsort_r(
1751 base,
1752 nmemb,
1753 size,
1754 [](void* userdata, const void* a, const void* b) {
1755 auto& cb = *static_cast<CompareCB*>(userdata);
1756 return cb(a, b);
1757 },
1758 &compare);
1759}
1760
1818inline void* bsearch_r(const void* key,
1819 const void* base,
1820 size_t nmemb,
1821 size_t size,
1822 CompareCallback_r compare,
1823 void* userdata)
1824{
1825 return SDL_bsearch_r(key, base, nmemb, size, compare, userdata);
1826}
1827
1884inline void* bsearch_r(const void* key,
1885 const void* base,
1886 size_t nmemb,
1887 size_t size,
1888 CompareCB compare)
1889{
1890 return bsearch_r(
1891 key,
1892 base,
1893 nmemb,
1894 size,
1895 [](void* userdata, const void* a, const void* b) {
1896 auto& cb = *static_cast<CompareCB*>(userdata);
1897 return cb(a, b);
1898 },
1899 &compare);
1900}
1901
1912inline int abs(int x) { return SDL_abs(x); }
1913
1933inline double abs(double x) { return SDL_fabs(x); }
1934
1954inline float abs(float x) { return SDL_fabsf(x); }
1955
1972template<class T, class U>
1973constexpr T min(T x, U y)
1974{
1975 return SDL_min(x, y);
1976}
1977
1994template<class T, class U>
1995constexpr T max(T x, U y)
1996{
1997 return SDL_max(x, y);
1998}
1999
2022template<class T, class U, class V>
2023constexpr T clamp(T x, U a, V b)
2024{
2025 return SDL_clamp(x, a, b);
2026}
2027
2041inline int isalpha(int x) { return SDL_isalpha(x); }
2042
2056inline int isalnum(int x) { return SDL_isalnum(x); }
2057
2071inline int isblank(int x) { return SDL_isblank(x); }
2072
2086inline int iscntrl(int x) { return SDL_iscntrl(x); }
2087
2101inline int isdigit(int x) { return SDL_isdigit(x); }
2102
2116inline int isxdigit(int x) { return SDL_isxdigit(x); }
2117
2134inline int ispunct(int x) { return SDL_ispunct(x); }
2135
2156inline int isspace(int x) { return SDL_isspace(x); }
2157
2171inline int isupper(int x) { return SDL_isupper(x); }
2172
2186inline int islower(int x) { return SDL_islower(x); }
2187
2205inline int isprint(int x) { return SDL_isprint(x); }
2206
2226inline int isgraph(int x) { return SDL_isgraph(x); }
2227
2244inline int toupper(int x) { return SDL_toupper(x); }
2245
2262inline int tolower(int x) { return SDL_tolower(x); }
2263
2283inline Uint16 crc16(Uint16 crc, const void* data, size_t len)
2284{
2285 return SDL_crc16(crc, data, len);
2286}
2287
2307inline Uint32 crc32(Uint32 crc, const void* data, size_t len)
2308{
2309 return SDL_crc32(crc, data, len);
2310}
2311
2336inline Uint32 murmur3_32(const void* data, size_t len, Uint32 seed)
2337{
2338 return SDL_murmur3_32(data, len, seed);
2339}
2340
2359inline void* memcpy(void* dst, const void* src, size_t len)
2360{
2361#ifdef SDL_SLOW_MEMCPY
2362 return SDL_memcpy(dst, src, len);
2363#else
2364 return ::memcpy(dst, src, len);
2365#endif // SDL_SLOW_MEMCPY
2366}
2367
2392template<typename T, typename U>
2393constexpr T* copyp(T* dst, const U* src)
2394{
2395 SDL_copyp(dst, src);
2396 return dst;
2397}
2398
2416inline void* memmove(void* dst, const void* src, size_t len)
2417{
2418#ifdef SDL_SLOW_MEMMOVE
2419 return SDL_memmove(dst, src, len);
2420#else
2421 return ::memmove(dst, src, len);
2422#endif // SDL_SLOW_MEMMOVE
2423}
2424
2443inline void* memset(void* dst, int c, size_t len)
2444{
2445#ifdef SDL_SLOW_MEMSET
2446 return SDL_memset(dst, c, len);
2447#else
2448 return ::memset(dst, c, len);
2449#endif // SDL_SLOW_MEMSET
2450}
2451
2470inline void* memset4(void* dst, Uint32 val, size_t dwords)
2471{
2472 return SDL_memset4(dst, val, dwords);
2473}
2474
2492template<class T>
2493inline void zero(T& x)
2494{
2495 SDL_zero(x);
2496}
2497
2515template<class T>
2516inline void zerop(T* x)
2517{
2518 SDL_zerop(x);
2519}
2520
2538template<class T, std::size_t N>
2539inline void zeroa(T (&x)[N])
2540{
2541 SDL_zeroa(x);
2542}
2543
2558inline int memcmp(const void* s1, const void* s2, size_t len)
2559{
2560 return SDL_memcmp(s1, s2, len);
2561}
2562
2587inline size_t wcslen(const wchar_t* wstr) { return SDL_wcslen(wstr); }
2588
2617inline size_t wcsnlen(const wchar_t* wstr, size_t maxlen)
2618{
2619 return SDL_wcsnlen(wstr, maxlen);
2620}
2621
2647inline size_t wcslcpy(wchar_t* dst, const wchar_t* src, size_t maxlen)
2648{
2649 return SDL_wcslcpy(dst, src, maxlen);
2650}
2651
2678inline size_t wcslcat(wchar_t* dst, const wchar_t* src, size_t maxlen)
2679{
2680 return SDL_wcslcat(dst, src, maxlen);
2681}
2682
2699inline wchar_t* wcsdup(const wchar_t* wstr) { return SDL_wcsdup(wstr); }
2700
2719inline wchar_t* wcsstr(const wchar_t* haystack, const wchar_t* needle)
2720{
2721 return SDL_wcsstr(haystack, needle);
2722}
2723
2745inline wchar_t* wcsnstr(const wchar_t* haystack,
2746 const wchar_t* needle,
2747 size_t maxlen)
2748{
2749 return SDL_wcsnstr(haystack, needle, maxlen);
2750}
2751
2768inline int wcscmp(const wchar_t* str1, const wchar_t* str2)
2769{
2770 return SDL_wcscmp(str1, str2);
2771}
2772
2800inline int wcsncmp(const wchar_t* str1, const wchar_t* str2, size_t maxlen)
2801{
2802 return SDL_wcsncmp(str1, str2, maxlen);
2803}
2804
2832inline int wcscasecmp(const wchar_t* str1, const wchar_t* str2)
2833{
2834 return SDL_wcscasecmp(str1, str2);
2835}
2836
2876inline int wcsncasecmp(const wchar_t* str1, const wchar_t* str2, size_t maxlen)
2877{
2878 return SDL_wcsncasecmp(str1, str2, maxlen);
2879}
2880
2905inline long wcstol(const wchar_t* str, wchar_t** endp, int base)
2906{
2907 return SDL_wcstol(str, endp, base);
2908}
2909
2928inline size_t strlen(StringParam str) { return SDL_strlen(str); }
2929
2951inline size_t strnlen(StringParam str, size_t maxlen)
2952{
2953 return SDL_strnlen(str, maxlen);
2954}
2955
2981inline size_t strlcpy(char* dst, StringParam src, size_t maxlen)
2982{
2983 return SDL_strlcpy(dst, src, maxlen);
2984}
2985
3012inline size_t utf8strlcpy(char* dst, StringParam src, size_t dst_bytes)
3013{
3014 return SDL_utf8strlcpy(dst, src, dst_bytes);
3015}
3016
3043inline size_t strlcat(char* dst, StringParam src, size_t maxlen)
3044{
3045 return SDL_strlcat(dst, src, maxlen);
3046}
3047
3064inline char* strdup(StringParam str) { return SDL_strdup(str); }
3065
3089inline char* strndup(StringParam str, size_t maxlen)
3090{
3091 return SDL_strndup(str, maxlen);
3092}
3093
3113inline char* strrev(char* str) { return SDL_strrev(str); }
3114
3134inline char* strupr(char* str) { return SDL_strupr(str); }
3135
3155inline char* strlwr(char* str) { return SDL_strlwr(str); }
3156
3175inline char* strchr(StringParam str, int c) { return SDL_strchr(str, c); }
3176
3194inline char* strrchr(StringParam str, int c) { return SDL_strrchr(str, c); }
3195
3214inline char* strstr(StringParam haystack, StringParam needle)
3215{
3216 return SDL_strstr(haystack, needle);
3217}
3218
3240inline char* strnstr(StringParam haystack, StringParam needle, size_t maxlen)
3241{
3242 return SDL_strnstr(haystack, needle, maxlen);
3243}
3244
3271inline char* strcasestr(StringParam haystack, StringParam needle)
3272{
3273 return SDL_strcasestr(haystack, needle);
3274}
3275
3302inline char* strtok_r(char* str, StringParam delim, char** saveptr)
3303{
3304 return SDL_strtok_r(str, delim, saveptr);
3305}
3306
3331inline size_t utf8strlen(StringParam str) { return SDL_utf8strlen(str); }
3332
3363inline size_t utf8strnlen(StringParam str, size_t bytes)
3364{
3365 return SDL_utf8strnlen(str, bytes);
3366}
3367
3393inline char* itoa(int value, char* str, int radix)
3394{
3395 return SDL_itoa(value, str, radix);
3396}
3397
3423inline char* uitoa(unsigned int value, char* str, int radix)
3424{
3425 return SDL_uitoa(value, str, radix);
3426}
3427
3453inline char* ltoa(long value, char* str, int radix)
3454{
3455 return SDL_ltoa(value, str, radix);
3456}
3457
3483inline char* ultoa(unsigned long value, char* str, int radix)
3484{
3485 return SDL_ultoa(value, str, radix);
3486}
3487
3488#ifndef SDL_NOLONGLONG
3489
3515inline char* lltoa(long long value, char* str, int radix)
3516{
3517 return SDL_lltoa(value, str, radix);
3518}
3519
3545inline char* ulltoa(unsigned long long value, char* str, int radix)
3546{
3547 return SDL_ulltoa(value, str, radix);
3548}
3549
3550#endif // SDL_NOLONGLONG
3551
3573inline int atoi(StringParam str) { return SDL_atoi(str); }
3574
3594inline double atof(StringParam str) { return SDL_atof(str); }
3595
3627inline long strtol(StringParam str, char** endp, int base)
3628{
3629 return SDL_strtol(str, endp, base);
3630}
3631
3662inline unsigned long strtoul(StringParam str, char** endp, int base)
3663{
3664 return SDL_strtoul(str, endp, base);
3665}
3666
3667#ifndef SDL_NOLONGLONG
3668
3699inline long long strtoll(StringParam str, char** endp, int base)
3700{
3701 return SDL_strtoll(str, endp, base);
3702}
3703
3734inline unsigned long long strtoull(StringParam str, char** endp, int base)
3735{
3736 return SDL_strtoull(str, endp, base);
3737}
3738
3739#endif // SDL_NOLONGLONG
3740
3768inline double strtod(StringParam str, char** endp)
3769{
3770 return SDL_strtod(str, endp);
3771}
3772
3790inline int strcmp(StringParam str1, StringParam str2)
3791{
3792 return SDL_strcmp(str1, str2);
3793}
3794
3822inline int strncmp(StringParam str1, StringParam str2, size_t maxlen)
3823{
3824 return SDL_strncmp(str1, str2, maxlen);
3825}
3826
3852inline int strcasecmp(StringParam str1, StringParam str2)
3853{
3854 return SDL_strcasecmp(str1, str2);
3855}
3856
3893inline int strncasecmp(StringParam str1, StringParam str2, size_t maxlen)
3894{
3895 return SDL_strncasecmp(str1, str2, maxlen);
3896}
3897
3914inline char* strpbrk(StringParam str, StringParam breakset)
3915{
3916 return SDL_strpbrk(str, breakset);
3917}
3918
3932constexpr Uint32 INVALID_UNICODE_CODEPOINT = SDL_INVALID_UNICODE_CODEPOINT;
3933
3975inline Uint32 StepUTF8(const char** pstr, size_t* pslen)
3976{
3977 return SDL_StepUTF8(pstr, pslen);
3978}
3979
4007inline Uint32 StepBackUTF8(StringParam start, const char** pstr)
4008{
4009 return SDL_StepBackUTF8(start, pstr);
4010}
4011
4039inline char* UCS4ToUTF8(Uint32 codepoint, char* dst)
4040{
4041 return SDL_UCS4ToUTF8(codepoint, dst);
4042}
4043
4059inline int sscanf(StringParam text,
4060 SDL_SCANF_FORMAT_STRING const char* fmt,
4061 ...)
4062{
4063 int rc;
4064 va_list ap;
4065 va_start(ap, fmt);
4066 rc = SDL_vsscanf(text, fmt, ap);
4067 va_end(ap);
4068 return rc;
4069}
4070
4087inline int vsscanf(StringParam text,
4088 SDL_SCANF_FORMAT_STRING const char* fmt,
4089 va_list ap)
4090{
4091 return SDL_vsscanf(text, fmt, ap);
4092}
4093
4124inline int snprintf(char* text,
4125 size_t maxlen,
4126 SDL_PRINTF_FORMAT_STRING const char* fmt,
4127 ...)
4128{
4129 va_list ap;
4130 int result;
4131
4132 va_start(ap, fmt);
4133 result = SDL_vsnprintf(text, maxlen, fmt, ap);
4134 va_end(ap);
4135
4136 return result;
4137}
4138
4170inline int swprintf(wchar_t* text,
4171 size_t maxlen,
4172 SDL_PRINTF_FORMAT_STRING const wchar_t* fmt,
4173 ...)
4174{
4175 va_list ap;
4176 int result;
4177
4178 va_start(ap, fmt);
4179 result = SDL_vswprintf(text, maxlen, fmt, ap);
4180 va_end(ap);
4181
4182 return result;
4183}
4184
4203inline int vsnprintf(char* text,
4204 size_t maxlen,
4205 SDL_PRINTF_FORMAT_STRING const char* fmt,
4206 va_list ap)
4207{
4208 return SDL_vsnprintf(text, maxlen, fmt, ap);
4209}
4210
4230inline int vswprintf(wchar_t* text,
4231 size_t maxlen,
4232 SDL_PRINTF_FORMAT_STRING const wchar_t* fmt,
4233 va_list ap)
4234{
4235 return SDL_vswprintf(text, maxlen, fmt, ap);
4236}
4237
4264inline int asprintf(char** strp, SDL_PRINTF_FORMAT_STRING const char* fmt, ...)
4265{
4266 va_list ap;
4267 int result;
4268
4269 va_start(ap, fmt);
4270 result = SDL_vasprintf(strp, fmt, ap);
4271 va_end(ap);
4272
4273 return result;
4274}
4275
4293inline int vasprintf(char** strp,
4294 SDL_PRINTF_FORMAT_STRING const char* fmt,
4295 va_list ap)
4296{
4297 return SDL_vasprintf(strp, fmt, ap);
4298}
4299
4317inline void srand(Uint64 seed) { SDL_srand(seed); }
4318
4349inline Sint32 rand(Sint32 n) { return SDL_rand(n); }
4350
4371inline float randf() { return SDL_randf(); }
4372
4394inline Uint32 rand_bits() { return SDL_rand_bits(); }
4395
4407{
4408 Uint64 m_state;
4409
4410public:
4411 constexpr Random()
4412 : m_state(0)
4413 {
4414 }
4415
4419 constexpr explicit Random(Uint64 state)
4420 : m_state(state)
4421 {
4422 }
4423
4425 constexpr operator Uint64() { return m_state; }
4426
4458 Sint32 rand(Sint32 n) { return SDL_rand_r(&m_state, n); }
4459
4482 float randf() { return SDL_randf_r(&m_state); }
4483
4505 Uint32 rand_bits() { return SDL_rand_bits_r(&m_state); }
4506};
4507
4541inline Sint32 rand_r(Uint64* state, Sint32 n) { return SDL_rand_r(state, n); }
4542
4567inline float randf_r(Uint64* state) { return SDL_randf_r(state); }
4568
4592inline Uint32 rand_bits_r(Uint64* state) { return SDL_rand_bits_r(state); }
4593
4601constexpr double PI_D = SDL_PI_D;
4602
4610constexpr float PI_F = SDL_PI_F;
4611
4639inline double acos(double x) { return SDL_acos(x); }
4640
4668inline float acos(float x) { return SDL_acosf(x); }
4669
4697inline double asin(double x) { return SDL_asin(x); }
4698
4726inline float asin(float x) { return SDL_asinf(x); }
4727
4757inline double atan(double x) { return SDL_atan(x); }
4758
4788inline float atan(float x) { return SDL_atanf(x); }
4789
4822inline double atan2(double y, double x) { return SDL_atan2(y, x); }
4823
4857inline float atan2(float y, float x) { return SDL_atan2f(y, x); }
4858
4885inline double ceil(double x) { return SDL_ceil(x); }
4886
4913inline float ceil(float x) { return SDL_ceilf(x); }
4914
4938inline double copysign(double x, double y) { return SDL_copysign(x, y); }
4939
4963inline float copysign(float x, float y) { return SDL_copysignf(x, y); }
4964
4990inline double cos(double x) { return SDL_cos(x); }
4991
5017inline float cos(float x) { return SDL_cosf(x); }
5018
5048inline double exp(double x) { return SDL_exp(x); }
5049
5079inline float exp(float x) { return SDL_expf(x); }
5080
5107inline double floor(double x) { return SDL_floor(x); }
5108
5135inline float floor(float x) { return SDL_floorf(x); }
5136
5164inline double trunc(double x) { return SDL_trunc(x); }
5165
5193inline float trunc(float x) { return SDL_truncf(x); }
5194
5223inline double fmod(double x, double y) { return SDL_fmod(x, y); }
5224
5253inline float fmod(float x, float y) { return SDL_fmodf(x, y); }
5254
5267inline int isinf(double x) { return SDL_isinf(x); }
5268
5281inline int isinf(float x) { return SDL_isinff(x); }
5282
5295inline int isnan(double x) { return SDL_isnan(x); }
5296
5309inline int isnan(float x) { return SDL_isnanf(x); }
5310
5338inline double log(double x) { return SDL_log(x); }
5339
5366inline float log(float x) { return SDL_logf(x); }
5367
5395inline double log10(double x) { return SDL_log10(x); }
5396
5424inline float log10(float x) { return SDL_log10f(x); }
5425
5444inline double modf(double x, double* y) { return SDL_modf(x, y); }
5445
5464inline float modf(float x, float* y) { return SDL_modff(x, y); }
5465
5494inline double pow(double x, double y) { return SDL_pow(x, y); }
5495
5524inline float pow(float x, float y) { return SDL_powf(x, y); }
5525
5553inline double round(double x) { return SDL_round(x); }
5554
5582inline float round(float x) { return SDL_roundf(x); }
5583
5611inline long lround(double x) { return SDL_lround(x); }
5612
5640inline long lround(float x) { return SDL_lroundf(x); }
5641
5665inline double scalbn(double x, int n) { return SDL_scalbn(x, n); }
5666
5690inline float scalbn(float x, int n) { return SDL_scalbnf(x, n); }
5691
5717inline double sin(double x) { return SDL_sin(x); }
5718
5744inline float sin(float x) { return SDL_sinf(x); }
5745
5769inline double sqrt(double x) { return SDL_sqrt(x); }
5770
5794inline float sqrt(float x) { return SDL_sqrtf(x); }
5795
5823inline double tan(double x) { return SDL_tan(x); }
5824
5852inline float tan(float x) { return SDL_tanf(x); }
5853
5864{
5865 IConvRaw m_resource = nullptr;
5866
5867public:
5869 constexpr IConv(std::nullptr_t = nullptr) noexcept
5870 : m_resource(IConvRaw(SDL_ICONV_ERROR))
5871 {
5872 }
5873
5881 constexpr explicit IConv(const IConvRaw resource) noexcept
5882 : m_resource(resource)
5883 {
5884 }
5885
5887 constexpr IConv(const IConv& other) = delete;
5888
5890 constexpr IConv(IConv&& other) noexcept
5891 : IConv(other.release())
5892 {
5893 }
5894
5895 constexpr IConv(const IConvRef& other) = delete;
5896
5897 constexpr IConv(IConvRef&& other) = delete;
5898
5914 : m_resource(SDL_iconv_open(tocode, fromcode))
5915 {
5916 }
5917
5919 ~IConv() { SDL_iconv_close(m_resource); }
5920
5922 constexpr IConv& operator=(IConv&& other) noexcept
5923 {
5924 std::swap(m_resource, other.m_resource);
5925 return *this;
5926 }
5927
5928protected:
5930 constexpr IConv& operator=(const IConv& other) noexcept = default;
5931
5932public:
5934 constexpr IConvRaw get() const noexcept { return m_resource; }
5935
5937 constexpr IConvRaw release() noexcept
5938 {
5939 auto r = m_resource;
5940 m_resource = nullptr;
5941 return r;
5942 }
5943
5945 constexpr auto operator<=>(const IConv& other) const noexcept = default;
5946
5948 constexpr explicit operator bool() const noexcept
5949 {
5950 return m_resource != IConvRaw(SDL_ICONV_ERROR);
5951 }
5952
5954 constexpr operator IConvParam() const noexcept { return {m_resource}; }
5955
5967 int close();
5968
6003 size_t iconv(const char** inbuf,
6004 size_t* inbytesleft,
6005 char** outbuf,
6006 size_t* outbytesleft);
6007};
6008
6011{
6012 using IConv::IConv;
6013
6021 IConvRef(IConvParam resource) noexcept
6022 : IConv(resource.value)
6023 {
6024 }
6025
6033 IConvRef(IConvRaw resource) noexcept
6034 : IConv(resource)
6035 {
6036 }
6037
6039 IConvRef(const IConvRef& other) noexcept
6040 : IConv(other.get())
6041 {
6042 }
6043
6046};
6047
6062inline IConv iconv_open(StringParam tocode, StringParam fromcode)
6063{
6064 return IConv(std::move(tocode), std::move(fromcode));
6065}
6066
6080inline int iconv_close(IConvRaw cd) { return CheckError(SDL_iconv_close(cd)); }
6081
6082inline int IConv::close() { return iconv_close(release()); }
6083
6118inline size_t iconv(IConvRaw cd,
6119 const char** inbuf,
6120 size_t* inbytesleft,
6121 char** outbuf,
6122 size_t* outbytesleft)
6123{
6124 return CheckError(SDL_iconv(cd, inbuf, inbytesleft, outbuf, outbytesleft));
6125}
6126
6127inline size_t IConv::iconv(const char** inbuf,
6128 size_t* inbytesleft,
6129 char** outbuf,
6130 size_t* outbytesleft)
6131{
6132 return SDL::iconv(m_resource, inbuf, inbytesleft, outbuf, outbytesleft);
6133}
6134
6135constexpr size_t ICONV_ERROR =
6136 SDL_ICONV_ERROR;
6137
6138constexpr size_t ICONV_E2BIG =
6139 SDL_ICONV_E2BIG;
6140
6141constexpr size_t ICONV_EILSEQ =
6142 SDL_ICONV_EILSEQ;
6143
6144constexpr size_t ICONV_EINVAL =
6145 SDL_ICONV_EINVAL;
6146
6169 StringParam fromcode,
6170 SourceBytes inbuf)
6171{
6172 return OwnArray<char>{
6173 SDL_iconv_string(tocode, fromcode, inbuf.data(), inbuf.size_bytes())};
6174}
6175
6188inline OwnArray<char> iconv_utf8_locale(std::string_view S)
6189{
6190 return iconv_string("", "UTF-8", S);
6191}
6192
6205inline OwnArray<Uint16> iconv_utf8_ucs2(std::string_view S)
6206{
6207 auto data = SDL_iconv_string("UCS-2", "UTF-8", S.data(), S.size());
6208 return OwnArray<Uint16>(reinterpret_cast<Uint16*>(data));
6209}
6210
6223inline OwnArray<Uint32> iconv_utf8_ucs4(std::string_view S)
6224{
6225 auto data = SDL_iconv_string("UCS-4", "UTF-8", S.data(), S.size());
6226 return OwnArray<Uint32>(reinterpret_cast<Uint32*>(data));
6227}
6228
6241inline OwnArray<char> iconv_wchar_utf8(std::wstring_view S)
6242{
6243 return iconv_string("UTF-8", "WCHAR_T", S);
6244}
6245
6263constexpr bool size_mul_check_overflow(size_t a, size_t b, size_t* ret)
6264{
6265 return SDL_size_mul_check_overflow(a, b, ret);
6266}
6267
6285constexpr bool size_add_check_overflow(size_t a, size_t b, size_t* ret)
6286{
6287 return SDL_size_add_check_overflow(a, b, ret);
6288}
6289
6305using FunctionPointer = SDL_FunctionPointer;
6306
6308
6309inline void PtrDeleter::operator()(void* ptr) const { SDL_free(ptr); }
6310
6311} // namespace SDL
6312
6313#endif /* SDL3PP_STDINC_H_ */
A thread-safe set of environment variables.
Definition: SDL3pp_stdinc.h:967
constexpr Environment(const EnvironmentRaw resource) noexcept
Constructs from EnvironmentParam.
Definition: SDL3pp_stdinc.h:984
constexpr EnvironmentRaw get() const noexcept
Retrieves underlying EnvironmentRaw.
Definition: SDL3pp_stdinc.h:1043
constexpr EnvironmentRaw release() noexcept
Retrieves underlying EnvironmentRaw and clear this.
Definition: SDL3pp_stdinc.h:1046
constexpr Environment & operator=(const Environment &other) noexcept=default
Assignment operator.
constexpr Environment(std::nullptr_t=nullptr) noexcept
Default ctor.
Definition: SDL3pp_stdinc.h:972
Uint64 GetVariableCount()
Get the Variables count.
Definition: SDL3pp_stdinc.h:1121
constexpr Environment & operator=(Environment &&other) noexcept
Assignment operator.
Definition: SDL3pp_stdinc.h:1031
constexpr auto operator<=>(const Environment &other) const noexcept=default
Comparison.
Environment(bool populated)
Create a set of environment variables.
Definition: SDL3pp_stdinc.h:1022
constexpr Environment(const Environment &other)=delete
Copy constructor.
~Environment()
Destructor.
Definition: SDL3pp_stdinc.h:1028
constexpr Environment(Environment &&other) noexcept
Move constructor.
Definition: SDL3pp_stdinc.h:993
An opaque handle representing string encoding conversion state.
Definition: SDL3pp_stdinc.h:5864
constexpr IConv(const IConvRaw resource) noexcept
Constructs from IConvParam.
Definition: SDL3pp_stdinc.h:5881
constexpr IConvRaw get() const noexcept
Retrieves underlying IConvRaw.
Definition: SDL3pp_stdinc.h:5934
constexpr IConv & operator=(IConv &&other) noexcept
Assignment operator.
Definition: SDL3pp_stdinc.h:5922
~IConv()
Destructor.
Definition: SDL3pp_stdinc.h:5919
constexpr IConv(const IConv &other)=delete
Copy constructor.
constexpr IConv(std::nullptr_t=nullptr) noexcept
Default ctor.
Definition: SDL3pp_stdinc.h:5869
constexpr IConvRaw release() noexcept
Retrieves underlying IConvRaw and clear this.
Definition: SDL3pp_stdinc.h:5937
constexpr auto operator<=>(const IConv &other) const noexcept=default
Comparison.
IConv(StringParam tocode, StringParam fromcode)
This function allocates a context for the specified character set conversion.
Definition: SDL3pp_stdinc.h:5913
constexpr IConv & operator=(const IConv &other) noexcept=default
Assignment operator.
constexpr IConv(IConv &&other) noexcept
Move constructor.
Definition: SDL3pp_stdinc.h:5890
Base class for SDL memory allocated array wrap.
Definition: SDL3pp_ownPtr.h:44
A independent pseudo random state.
Definition: SDL3pp_stdinc.h:4407
constexpr Random(Uint64 state)
Init state with the given value.
Definition: SDL3pp_stdinc.h:4419
float randf()
Generate a uniform pseudo-random floating point number less than 1.0.
Definition: SDL3pp_stdinc.h:4482
Uint32 rand_bits()
Generate 32 pseudo-random bits.
Definition: SDL3pp_stdinc.h:4505
Sint32 rand(Sint32 n)
Generate a pseudo-random number less than n for positive n.
Definition: SDL3pp_stdinc.h:4458
Source byte stream.
Definition: SDL3pp_strings.h:239
constexpr size_t size_bytes() const
Retrieves contained size in bytes.
Definition: SDL3pp_strings.h:303
constexpr const char * data() const
Retrieves contained data.
Definition: SDL3pp_strings.h:306
Helpers to use C++ strings parameters.
Definition: SDL3pp_strings.h:43
SDL times are signed, 64-bit integers representing nanoseconds since the Unix epoch (Jan 1,...
Definition: SDL3pp_stdinc.h:414
constexpr Sint64 ToNS() const
Converts to nanoseconds Sint64.
Definition: SDL3pp_stdinc.h:466
constexpr Time & operator+=(std::chrono::nanoseconds interval)
Increment time.
Definition: SDL3pp_stdinc.h:536
constexpr float ToSeconds() const
Converts a time to seconds (float) since epoch.
Definition: SDL3pp_stdinc.h:526
constexpr Time & operator-=(std::chrono::nanoseconds interval)
Decrement.
Definition: SDL3pp_stdinc.h:543
constexpr Time(std::chrono::nanoseconds time) noexcept
Wraps Time.
Definition: SDL3pp_stdinc.h:435
constexpr Time(TimeRaw time) noexcept
Wraps Time.
Definition: SDL3pp_stdinc.h:425
static constexpr Time FromNS(Sint64 time)
Create from a nanoseconds Sint64.
Definition: SDL3pp_stdinc.h:460
static constexpr Time FromSeconds(float interval)
Converts a time to seconds (float) since epoch.
Definition: SDL3pp_stdinc.h:529
Concept of interface.
Definition: SDL3pp_stdinc.h:572
constexpr void CheckError(bool result)
Check and throw if returned value from SDL is an error.
Definition: SDL3pp_error.h:197
int wcsncmp(const wchar_t *str1, const wchar_t *str2, size_t maxlen)
Compare two wide strings up to a number of wchar_t values.
Definition: SDL3pp_stdinc.h:2800
double log(double x)
Compute the natural logarithm of x.
Definition: SDL3pp_stdinc.h:5338
char * UCS4ToUTF8(Uint32 codepoint, char *dst)
Convert a single Unicode codepoint to UTF-8.
Definition: SDL3pp_stdinc.h:4039
long wcstol(const wchar_t *str, wchar_t **endp, int base)
Parse a long from a wide string.
Definition: SDL3pp_stdinc.h:2905
char * strdup(StringParam str)
Allocate a copy of a string.
Definition: SDL3pp_stdinc.h:3064
void SetMemoryFunctions(malloc_func malloc_func, calloc_func calloc_func, realloc_func realloc_func, free_func free_func)
Replace SDL's memory allocation functions with a custom set.
Definition: SDL3pp_stdinc.h:886
double strtod(StringParam str, char **endp)
Parse a double from a string.
Definition: SDL3pp_stdinc.h:3768
void SetVariable(StringParam name, StringParam value, bool overwrite)
Set the value of a variable in the environment.
Definition: SDL3pp_stdinc.h:1343
int(SDLCALL *)(void *userdata, const void *a, const void *b) CompareCallback_r
A callback used with SDL sorting and binary search functions.
Definition: SDL3pp_stdinc.h:1617
constexpr Sint8 MIN_SINT8
Min representable value.
Definition: SDL3pp_stdinc.h:282
char * strcasestr(StringParam haystack, StringParam needle)
Search a UTF-8 string for the first instance of a specific substring, case-insensitively.
Definition: SDL3pp_stdinc.h:3271
void UnsetVariable(StringParam name)
Clear a variable from the environment.
Definition: SDL3pp_stdinc.h:1374
double atan(double x)
Compute the arc tangent of x.
Definition: SDL3pp_stdinc.h:4757
int asprintf(char **strp, SDL_PRINTF_FORMAT_STRING const char *fmt,...)
This works exactly like asprintf() but doesn't require access to a C runtime.
Definition: SDL3pp_stdinc.h:4264
double ceil(double x)
Compute the ceiling of x.
Definition: SDL3pp_stdinc.h:4885
char * strlwr(char *str)
Convert a string to lowercase.
Definition: SDL3pp_stdinc.h:3155
void * memmove(void *dst, const void *src, size_t len)
Copy memory ranges that might overlap.
Definition: SDL3pp_stdinc.h:2416
int memcmp(const void *s1, const void *s2, size_t len)
Compare two buffers of memory.
Definition: SDL3pp_stdinc.h:2558
constexpr Uint16 MIN_UINT16
Min representable value.
Definition: SDL3pp_stdinc.h:321
constexpr std::size_t arraysize(const T(&array)[N])
The number of elements in a static array.
Definition: SDL3pp_stdinc.h:198
char * strnstr(StringParam haystack, StringParam needle, size_t maxlen)
Search a string, up to n bytes, for the first instance of a specific substring.
Definition: SDL3pp_stdinc.h:3240
OwnArray< Uint16 > iconv_utf8_ucs2(std::string_view S)
Convert a UTF-8 string to UCS-2.
Definition: SDL3pp_stdinc.h:6205
int isnan(double x)
Return whether the value is NaN.
Definition: SDL3pp_stdinc.h:5295
constexpr Uint32 INVALID_UNICODE_CODEPOINT
The Unicode REPLACEMENT CHARACTER codepoint.
Definition: SDL3pp_stdinc.h:3932
double scalbn(double x, int n)
Scale x by an integer power of two.
Definition: SDL3pp_stdinc.h:5665
char * ultoa(unsigned long value, char *str, int radix)
Convert an unsigned long integer into a string.
Definition: SDL3pp_stdinc.h:3483
wchar_t * wcsdup(const wchar_t *wstr)
Allocate a copy of a wide string.
Definition: SDL3pp_stdinc.h:2699
void(SDLCALL *)(void *mem) free_func
A callback used to implement free().
Definition: SDL3pp_stdinc.h:808
int isgraph(int x)
Report if a character is any "printable" except space.
Definition: SDL3pp_stdinc.h:2226
constexpr Sint16 MIN_SINT16
Min representable value.
Definition: SDL3pp_stdinc.h:308
OwnArray< char * > GetVariables()
Get all variables in the environment.
Definition: SDL3pp_stdinc.h:1310
const char * GetEnvironmentVariable(EnvironmentParam env, StringParam name)
Get the value of a variable in the environment.
Definition: SDL3pp_stdinc.h:1275
int strncmp(StringParam str1, StringParam str2, size_t maxlen)
Compare two UTF-8 strings up to a number of bytes.
Definition: SDL3pp_stdinc.h:3822
size_t iconv(const char **inbuf, size_t *inbytesleft, char **outbuf, size_t *outbytesleft)
This function converts text between encodings, reading from and writing to a buffer.
Definition: SDL3pp_stdinc.h:6127
void *(SDLCALL *)(size_t nmemb, size_t size) calloc_func
A callback used to implement calloc().
Definition: SDL3pp_stdinc.h:769
double asin(double x)
Compute the arc sine of x.
Definition: SDL3pp_stdinc.h:4697
Uint16 crc16(Uint16 crc, const void *data, size_t len)
Calculate a CRC-16 value.
Definition: SDL3pp_stdinc.h:2283
char * strrev(char *str)
Reverse a string's contents.
Definition: SDL3pp_stdinc.h:3113
int strncasecmp(StringParam str1, StringParam str2, size_t maxlen)
Compare two UTF-8 strings, case-insensitively, up to a number of bytes.
Definition: SDL3pp_stdinc.h:3893
constexpr T min(T x, U y)
Return the lesser of two values.
Definition: SDL3pp_stdinc.h:1973
SDL_FunctionPointer FunctionPointer
A generic function pointer.
Definition: SDL3pp_stdinc.h:6305
unsigned long strtoul(StringParam str, char **endp, int base)
Parse an unsigned long from a string.
Definition: SDL3pp_stdinc.h:3662
void *(SDLCALL *)(void *mem, size_t size) realloc_func
A callback used to implement realloc().
Definition: SDL3pp_stdinc.h:790
::Uint32 Uint32
An unsigned 32-bit integer type.
Definition: SDL3pp_stdinc.h:341
int isdigit(int x)
Report if a character is a numeric digit.
Definition: SDL3pp_stdinc.h:2101
std::chrono::duration< float > Seconds
Duration in seconds (float).
Definition: SDL3pp_stdinc.h:380
double exp(double x)
Compute the exponential of x.
Definition: SDL3pp_stdinc.h:5048
char * strstr(StringParam haystack, StringParam needle)
Search a string for the first instance of a specific substring.
Definition: SDL3pp_stdinc.h:3214
constexpr bool size_mul_check_overflow(size_t a, size_t b, size_t *ret)
Multiply two integers, checking for overflow.
Definition: SDL3pp_stdinc.h:6263
constexpr Uint32 MAX_UINT32
Max representable value.
Definition: SDL3pp_stdinc.h:344
IConv iconv_open(StringParam tocode, StringParam fromcode)
This function allocates a context for the specified character set conversion.
Definition: SDL3pp_stdinc.h:6062
int vsnprintf(char *text, size_t maxlen, SDL_PRINTF_FORMAT_STRING const char *fmt, va_list ap)
This works exactly like vsnprintf() but doesn't require access to a C runtime.
Definition: SDL3pp_stdinc.h:4203
char * strchr(StringParam str, int c)
Search a string for the first instance of a specific byte.
Definition: SDL3pp_stdinc.h:3175
double copysign(double x, double y)
Copy the sign of one floating-point value to another.
Definition: SDL3pp_stdinc.h:4938
Environment CreateEnvironment(bool populated)
Create a set of environment variables.
Definition: SDL3pp_stdinc.h:1252
void * malloc(size_t size)
Allocate uninitialized memory.
Definition: SDL3pp_stdinc.h:643
constexpr float FLT_EPSILON
Epsilon constant, used for comparing floating-point numbers.
Definition: SDL3pp_stdinc.h:564
double modf(double x, double *y)
Split x into integer and fractional parts.
Definition: SDL3pp_stdinc.h:5444
void zero(T &x)
Clear an object's memory to zero.
Definition: SDL3pp_stdinc.h:2493
size_t strlcat(char *dst, StringParam src, size_t maxlen)
Concatenate strings.
Definition: SDL3pp_stdinc.h:3043
void zeroa(T(&x)[N])
Clear an array's memory to zero.
Definition: SDL3pp_stdinc.h:2539
char * strndup(StringParam str, size_t maxlen)
Allocate a copy of a string, up to n characters.
Definition: SDL3pp_stdinc.h:3089
constexpr Uint8 MIN_UINT64
Min representable value.
Definition: SDL3pp_stdinc.h:377
size_t iconv(IConvRaw cd, const char **inbuf, size_t *inbytesleft, char **outbuf, size_t *outbytesleft)
This function converts text between encodings, reading from and writing to a buffer.
Definition: SDL3pp_stdinc.h:6118
std::chrono::milliseconds Milliseconds
Duration in Miliseconds (Uint32).
Definition: SDL3pp_stdinc.h:386
int snprintf(char *text, size_t maxlen, SDL_PRINTF_FORMAT_STRING const char *fmt,...)
This works exactly like snprintf() but doesn't require access to a C runtime.
Definition: SDL3pp_stdinc.h:4124
::Uint64 Uint64
An unsigned 64-bit integer type.
Definition: SDL3pp_stdinc.h:371
double round(double x)
Round x to the nearest integer.
Definition: SDL3pp_stdinc.h:5553
int sscanf(StringParam text, SDL_SCANF_FORMAT_STRING const char *fmt,...)
This works exactly like sscanf() but doesn't require access to a C runtime.
Definition: SDL3pp_stdinc.h:4059
size_t strlcpy(char *dst, StringParam src, size_t maxlen)
Copy a string.
Definition: SDL3pp_stdinc.h:2981
void * memset(void *dst, int c, size_t len)
Initialize all bytes of buffer of memory to a specific value.
Definition: SDL3pp_stdinc.h:2443
void UnsetEnvironmentVariable(EnvironmentParam env, StringParam name)
Clear a variable from the environment.
Definition: SDL3pp_stdinc.h:1369
constexpr Uint64 MAX_UINT64
Max representable value.
Definition: SDL3pp_stdinc.h:374
Uint32 rand_bits_r(Uint64 *state)
Generate 32 pseudo-random bits.
Definition: SDL3pp_stdinc.h:4592
int iconv_close(IConvRaw cd)
This function frees a context used for character set conversion.
Definition: SDL3pp_stdinc.h:6080
void GetOriginalMemoryFunctions(malloc_func *malloc_func, calloc_func *calloc_func, realloc_func *realloc_func, free_func *free_func)
Get the original set of SDL memory functions.
Definition: SDL3pp_stdinc.h:827
int strcmp(StringParam str1, StringParam str2)
Compare two null-terminated UTF-8 strings.
Definition: SDL3pp_stdinc.h:3790
float randf_r(Uint64 *state)
Generate a uniform pseudo-random floating point number less than 1.0.
Definition: SDL3pp_stdinc.h:4567
char * uitoa(unsigned int value, char *str, int radix)
Convert an unsigned integer into a string.
Definition: SDL3pp_stdinc.h:3423
double pow(double x, double y)
Raise x to the power y
Definition: SDL3pp_stdinc.h:5494
constexpr T * copyp(T *dst, const U *src)
A macro to copy memory between objects, with basic type checking.
Definition: SDL3pp_stdinc.h:2393
constexpr Sint32 MIN_SINT32
Min representable value.
Definition: SDL3pp_stdinc.h:334
EnvironmentRaw GetEnvironment()
Get the process environment.
Definition: SDL3pp_stdinc.h:1230
int isprint(int x)
Report if a character is "printable".
Definition: SDL3pp_stdinc.h:2205
long lround(double x)
Round x to the nearest integer representable as a long.
Definition: SDL3pp_stdinc.h:5611
std::chrono::nanoseconds Nanoseconds
Duration in Nanoseconds (Uint64).
Definition: SDL3pp_stdinc.h:383
int isxdigit(int x)
Report if a character is a hexadecimal digit.
Definition: SDL3pp_stdinc.h:2116
constexpr T max(T x, U y)
Return the greater of two values.
Definition: SDL3pp_stdinc.h:1995
int atoi(StringParam str)
Parse an int from a string.
Definition: SDL3pp_stdinc.h:3573
OwnArray< char > iconv_string(StringParam tocode, StringParam fromcode, SourceBytes inbuf)
Helper function to convert a string's encoding in one call.
Definition: SDL3pp_stdinc.h:6168
int tolower(int x)
Convert low-ASCII English letters to lowercase.
Definition: SDL3pp_stdinc.h:2262
int isalpha(int x)
Query if a character is alphabetic (a letter).
Definition: SDL3pp_stdinc.h:2041
constexpr size_t ICONV_E2BIG
Output buffer was too small.
Definition: SDL3pp_stdinc.h:6138
OwnArray< char > iconv_utf8_locale(std::string_view S)
Convert a UTF-8 string to the current locale's character encoding.
Definition: SDL3pp_stdinc.h:6188
OwnArray< Uint32 > iconv_utf8_ucs4(std::string_view S)
Convert a UTF-8 string to UCS-4.
Definition: SDL3pp_stdinc.h:6223
int unsetenv_unsafe(StringParam name)
Clear a variable from the environment.
Definition: SDL3pp_stdinc.h:1469
constexpr float ToSeconds(Seconds duration)
Converts a time duration to seconds (float).
Definition: SDL3pp_stdinc.h:389
char * strupr(char *str)
Convert a string to uppercase.
Definition: SDL3pp_stdinc.h:3134
::Uint8 Uint8
An unsigned 8-bit integer type.
Definition: SDL3pp_stdinc.h:289
int close()
This function frees a context used for character set conversion.
Definition: SDL3pp_stdinc.h:6082
size_t utf8strlen(StringParam str)
Count the number of codepoints in a UTF-8 string.
Definition: SDL3pp_stdinc.h:3331
constexpr Seconds FromSeconds(float duration)
Converts a float to seconds representation.
Definition: SDL3pp_stdinc.h:392
size_t utf8strnlen(StringParam str, size_t bytes)
Count the number of codepoints in a UTF-8 string, up to n bytes.
Definition: SDL3pp_stdinc.h:3363
int vswprintf(wchar_t *text, size_t maxlen, SDL_PRINTF_FORMAT_STRING const wchar_t *fmt, va_list ap)
This works exactly like vswprintf() but doesn't require access to a C runtime.
Definition: SDL3pp_stdinc.h:4230
int isupper(int x)
Report if a character is upper case.
Definition: SDL3pp_stdinc.h:2171
size_t wcsnlen(const wchar_t *wstr, size_t maxlen)
This works exactly like wcsnlen() but doesn't require access to a C runtime.
Definition: SDL3pp_stdinc.h:2617
double sqrt(double x)
Compute the square root of x.
Definition: SDL3pp_stdinc.h:5769
constexpr Sint16 MAX_SINT16
Max representable value.
Definition: SDL3pp_stdinc.h:305
void srand(Uint64 seed)
Seeds the pseudo-random number generator.
Definition: SDL3pp_stdinc.h:4317
constexpr Uint8 MAX_UINT8
Max representable value.
Definition: SDL3pp_stdinc.h:292
Sint32 rand_r(Uint64 *state, Sint32 n)
Generate a pseudo-random number less than n for positive n.
Definition: SDL3pp_stdinc.h:4541
double tan(double x)
Compute the tangent of x.
Definition: SDL3pp_stdinc.h:5823
double sin(double x)
Compute the sine of x.
Definition: SDL3pp_stdinc.h:5717
constexpr size_t ICONV_EILSEQ
Invalid input sequence was encountered.
Definition: SDL3pp_stdinc.h:6141
const char * getenv_unsafe(StringParam name)
Get the value of a variable in the environment.
Definition: SDL3pp_stdinc.h:1430
size_t utf8strlcpy(char *dst, StringParam src, size_t dst_bytes)
Copy an UTF-8 string.
Definition: SDL3pp_stdinc.h:3012
constexpr Sint64 MIN_SINT64
Min representable value.
Definition: SDL3pp_stdinc.h:362
::Sint8 Sint8
A signed 8-bit integer type.
Definition: SDL3pp_stdinc.h:276
char * strtok_r(char *str, StringParam delim, char **saveptr)
This works exactly like strtok_r() but doesn't require access to a C runtime.
Definition: SDL3pp_stdinc.h:3302
void * memset4(void *dst, Uint32 val, size_t dwords)
Initialize all 32-bit words of buffer of memory to a specific value.
Definition: SDL3pp_stdinc.h:2470
constexpr size_t ICONV_ERROR
Generic error. Check GetError()?
Definition: SDL3pp_stdinc.h:6135
int iscntrl(int x)
Report if a character is a control character.
Definition: SDL3pp_stdinc.h:2086
int swprintf(wchar_t *text, size_t maxlen, SDL_PRINTF_FORMAT_STRING const wchar_t *fmt,...)
This works exactly like swprintf() but doesn't require access to a C runtime.
Definition: SDL3pp_stdinc.h:4170
constexpr double PI_D
The value of Pi, as a double-precision floating point literal.
Definition: SDL3pp_stdinc.h:4601
int islower(int x)
Report if a character is lower case.
Definition: SDL3pp_stdinc.h:2186
int isinf(double x)
Return whether the value is infinity.
Definition: SDL3pp_stdinc.h:5267
int isspace(int x)
Report if a character is whitespace.
Definition: SDL3pp_stdinc.h:2156
void DestroyEnvironment(EnvironmentRaw env)
Destroy a set of environment variables.
Definition: SDL3pp_stdinc.h:1391
size_t strnlen(StringParam str, size_t maxlen)
This works exactly like strnlen() but doesn't require access to a C runtime.
Definition: SDL3pp_stdinc.h:2951
int strcasecmp(StringParam str1, StringParam str2)
Compare two null-terminated UTF-8 strings, case-insensitively.
Definition: SDL3pp_stdinc.h:3852
size_t strlen(StringParam str)
This works exactly like strlen() but doesn't require access to a C runtime.
Definition: SDL3pp_stdinc.h:2928
constexpr Uint16 MAX_UINT16
Max representable value.
Definition: SDL3pp_stdinc.h:318
const char * GetVariable(StringParam name)
Get the value of a variable in the environment.
Definition: SDL3pp_stdinc.h:1281
const char * getenv(StringParam name)
Get the value of a variable in the environment.
Definition: SDL3pp_stdinc.h:1411
int setenv_unsafe(StringParam name, StringParam value, int overwrite)
Set the value of a variable in the environment.
Definition: SDL3pp_stdinc.h:1451
constexpr void InitInterface(I *iface)
A macro to initialize an SDL interface.
Definition: SDL3pp_stdinc.h:613
void *(SDLCALL *)(size_t size) malloc_func
A callback used to implement malloc().
Definition: SDL3pp_stdinc.h:748
int wcscmp(const wchar_t *str1, const wchar_t *str2)
Compare two null-terminated wide strings.
Definition: SDL3pp_stdinc.h:2768
double acos(double x)
Compute the arc cosine of x.
Definition: SDL3pp_stdinc.h:4639
Sint32 rand(Sint32 n)
Generate a pseudo-random number less than n for positive n.
Definition: SDL3pp_stdinc.h:4349
constexpr Sint64 MAX_SINT64
Max representable value.
Definition: SDL3pp_stdinc.h:359
constexpr bool size_add_check_overflow(size_t a, size_t b, size_t *ret)
Add two integers, checking for overflow.
Definition: SDL3pp_stdinc.h:6285
void qsort_r(void *base, size_t nmemb, size_t size, CompareCallback_r compare, void *userdata)
Sort an array, passing a userdata pointer to the compare function.
Definition: SDL3pp_stdinc.h:1688
double floor(double x)
Compute the floor of x.
Definition: SDL3pp_stdinc.h:5107
Uint32 StepUTF8(const char **pstr, size_t *pslen)
Decode a UTF-8 string, one Unicode codepoint at a time.
Definition: SDL3pp_stdinc.h:3975
int toupper(int x)
Convert low-ASCII English letters to uppercase.
Definition: SDL3pp_stdinc.h:2244
SDL_Time TimeRaw
Alias to raw representation for Time.
Definition: SDL3pp_stdinc.h:41
int(SDLCALL *)(const void *a, const void *b) CompareCallback
A callback used with SDL sorting and binary search functions.
Definition: SDL3pp_stdinc.h:1488
Uint32 murmur3_32(const void *data, size_t len, Uint32 seed)
Calculate a 32-bit MurmurHash3 value for a block of data.
Definition: SDL3pp_stdinc.h:2336
constexpr Uint32 FourCC(Uint8 a, Uint8 b, Uint8 c, Uint8 d)
Define a four character code as a Uint32.
Definition: SDL3pp_stdinc.h:236
Uint32 StepBackUTF8(StringParam start, const char **pstr)
Decode a UTF-8 string in reverse, one Unicode codepoint at a time.
Definition: SDL3pp_stdinc.h:4007
size_t wcslcpy(wchar_t *dst, const wchar_t *src, size_t maxlen)
Copy a wide string.
Definition: SDL3pp_stdinc.h:2647
float randf()
Generate a uniform pseudo-random floating point number less than 1.0.
Definition: SDL3pp_stdinc.h:4371
constexpr T clamp(T x, U a, V b)
Return a value clamped to a range.
Definition: SDL3pp_stdinc.h:2023
constexpr Time MAX_TIME
Max allowed time representation.
Definition: SDL3pp_stdinc.h:551
constexpr Nanoseconds FromNS(Sint64 duration)
Converts a Sint64 to nanoseconds representation.
Definition: SDL3pp_stdinc.h:398
SDL_iconv_t IConvRaw
Alias to raw representation for IConv.
Definition: SDL3pp_stdinc.h:86
int wcsncasecmp(const wchar_t *str1, const wchar_t *str2, size_t maxlen)
Compare two wide strings, case-insensitively, up to a number of wchar_t.
Definition: SDL3pp_stdinc.h:2876
void aligned_free(void *mem)
Free memory allocated by aligned_alloc().
Definition: SDL3pp_stdinc.h:938
void zerop(T *x)
Clear an object's memory to zero, using a pointer.
Definition: SDL3pp_stdinc.h:2516
int abs(int x)
Compute the absolute value of x.
Definition: SDL3pp_stdinc.h:1912
void * calloc(size_t nmemb, size_t size)
Allocate a zero-initialized array.
Definition: SDL3pp_stdinc.h:668
void GetMemoryFunctions(malloc_func *malloc_func, calloc_func *calloc_func, realloc_func *realloc_func, free_func *free_func)
Get the current set of SDL memory functions.
Definition: SDL3pp_stdinc.h:853
void qsort(void *base, size_t nmemb, size_t size, CompareCallback compare)
Sort an array.
Definition: SDL3pp_stdinc.h:1534
constexpr Time MIN_TIME
Min allowed time representation.
Definition: SDL3pp_stdinc.h:554
constexpr Sint64 ToNS(Nanoseconds duration)
Converts a time duration to nanoseconds (Sint64);.
Definition: SDL3pp_stdinc.h:395
int isblank(int x)
Report if a character is blank (a space or tab).
Definition: SDL3pp_stdinc.h:2071
void * realloc(void *mem, size_t size)
Change the size of allocated memory.
Definition: SDL3pp_stdinc.h:709
::Sint64 Sint64
A signed 64-bit integer type.
Definition: SDL3pp_stdinc.h:356
::Sint32 Sint32
A signed 32-bit integer type.
Definition: SDL3pp_stdinc.h:328
int vasprintf(char **strp, SDL_PRINTF_FORMAT_STRING const char *fmt, va_list ap)
This works exactly like vasprintf() but doesn't require access to a C runtime.
Definition: SDL3pp_stdinc.h:4293
char * itoa(int value, char *str, int radix)
Convert an integer into a string.
Definition: SDL3pp_stdinc.h:3393
int ispunct(int x)
Report if a character is a punctuation mark.
Definition: SDL3pp_stdinc.h:2134
int vsscanf(StringParam text, SDL_SCANF_FORMAT_STRING const char *fmt, va_list ap)
This works exactly like vsscanf() but doesn't require access to a C runtime.
Definition: SDL3pp_stdinc.h:4087
constexpr Uint8 MIN_UINT8
Min representable value.
Definition: SDL3pp_stdinc.h:295
std::function< int(const void *a, const void *b)> CompareCB
A callback used with SDL sorting and binary search functions.
Definition: SDL3pp_stdinc.h:1634
::Sint16 Sint16
A signed 16-bit integer type.
Definition: SDL3pp_stdinc.h:302
wchar_t * wcsnstr(const wchar_t *haystack, const wchar_t *needle, size_t maxlen)
Search a wide string, up to n wide chars, for the first instance of a specific substring.
Definition: SDL3pp_stdinc.h:2745
Uint32 crc32(Uint32 crc, const void *data, size_t len)
Calculate a CRC-32 value.
Definition: SDL3pp_stdinc.h:2307
double log10(double x)
Compute the base-10 logarithm of x.
Definition: SDL3pp_stdinc.h:5395
void SetEnvironmentVariable(EnvironmentParam env, StringParam name, StringParam value, bool overwrite)
Set the value of a variable in the environment.
Definition: SDL3pp_stdinc.h:1335
constexpr float PI_F
The value of Pi, as a single-precision floating point literal.
Definition: SDL3pp_stdinc.h:4610
void Destroy()
Destroy a set of environment variables.
Definition: SDL3pp_stdinc.h:1396
wchar_t * wcsstr(const wchar_t *haystack, const wchar_t *needle)
Search a wide string for the first instance of a specific substring.
Definition: SDL3pp_stdinc.h:2719
void * bsearch(const void *key, const void *base, size_t nmemb, size_t size, CompareCallback compare)
Perform a binary search on a previously sorted array.
Definition: SDL3pp_stdinc.h:1591
double cos(double x)
Compute the cosine of x.
Definition: SDL3pp_stdinc.h:4990
void free(void *mem)
Free allocated memory.
Definition: SDL3pp_stdinc.h:729
double atan2(double y, double x)
Compute the arc tangent of y / x, using the signs of x and y to adjust the result's quadrant.
Definition: SDL3pp_stdinc.h:4822
::Uint16 Uint16
An unsigned 16-bit integer type.
Definition: SDL3pp_stdinc.h:315
int wcscasecmp(const wchar_t *str1, const wchar_t *str2)
Compare two null-terminated wide strings, case-insensitively.
Definition: SDL3pp_stdinc.h:2832
char * strpbrk(StringParam str, StringParam breakset)
Searches a string for the first occurrence of any character contained in a breakset,...
Definition: SDL3pp_stdinc.h:3914
void * aligned_alloc(size_t alignment, size_t size)
Allocate memory aligned to a specific alignment.
Definition: SDL3pp_stdinc.h:917
int GetNumAllocations()
Get the number of outstanding (unfreed) allocations.
Definition: SDL3pp_stdinc.h:949
Uint32 rand_bits()
Generate 32 pseudo-random bits.
Definition: SDL3pp_stdinc.h:4394
constexpr Sint8 MAX_SINT8
Max representable value.
Definition: SDL3pp_stdinc.h:279
constexpr Uint8 MIN_UINT32
Min representable value.
Definition: SDL3pp_stdinc.h:347
double trunc(double x)
Truncate x to an integer.
Definition: SDL3pp_stdinc.h:5164
OwnArray< char * > GetEnvironmentVariables(EnvironmentParam env)
Get all variables in the environment.
Definition: SDL3pp_stdinc.h:1305
char * ltoa(long value, char *str, int radix)
Convert a long integer into a string.
Definition: SDL3pp_stdinc.h:3453
size_t wcslcat(wchar_t *dst, const wchar_t *src, size_t maxlen)
Concatenate wide strings.
Definition: SDL3pp_stdinc.h:2678
double atof(StringParam str)
Parse a double from a string.
Definition: SDL3pp_stdinc.h:3594
constexpr size_t ICONV_EINVAL
Incomplete input sequence was encountered.
Definition: SDL3pp_stdinc.h:6144
constexpr Sint32 MAX_SINT32
Max representable value.
Definition: SDL3pp_stdinc.h:331
void * bsearch_r(const void *key, const void *base, size_t nmemb, size_t size, CompareCallback_r compare, void *userdata)
Perform a binary search on a previously sorted array, passing a userdata pointer to the compare funct...
Definition: SDL3pp_stdinc.h:1818
long strtol(StringParam str, char **endp, int base)
Parse a long from a string.
Definition: SDL3pp_stdinc.h:3627
OwnArray< char > iconv_wchar_utf8(std::wstring_view S)
Convert a wchar_t string to UTF-8.
Definition: SDL3pp_stdinc.h:6241
char * strrchr(StringParam str, int c)
Search a string for the last instance of a specific byte.
Definition: SDL3pp_stdinc.h:3194
size_t wcslen(const wchar_t *wstr)
This works exactly like wcslen() but doesn't require access to a C runtime.
Definition: SDL3pp_stdinc.h:2587
SDL_Environment * EnvironmentRaw
Alias to raw representation for Environment.
Definition: SDL3pp_stdinc.h:50
int isalnum(int x)
Query if a character is alphabetic (a letter) or a number.
Definition: SDL3pp_stdinc.h:2056
double fmod(double x, double y)
Return the floating-point remainder of x / y
Definition: SDL3pp_stdinc.h:5223
void * memcpy(void *dst, const void *src, size_t len)
Copy non-overlapping memory.
Definition: SDL3pp_stdinc.h:2359
static Time FromWindows(Uint32 dwLowDateTime, Uint32 dwHighDateTime)
Converts a Windows FILETIME (100-nanosecond intervals since January 1, 1601) to an SDL time.
Definition: SDL3pp_time.h:399
void ToWindows(Uint32 *dwLowDateTime, Uint32 *dwHighDateTime) const
Converts an SDL time into a Windows FILETIME (100-nanosecond intervals since January 1,...
Definition: SDL3pp_time.h:394
static Time Current()
Gets the current value of the system realtime clock in nanoseconds since Jan 1, 1970 in Universal Coo...
Definition: SDL3pp_time.h:348
constexpr Sint64 ToPosix() const
Convert nanoseconds to seconds.
Definition: SDL3pp_timer.h:31
static constexpr Time FromPosix(Sint64 time)
Convert seconds to nanoseconds.
Definition: SDL3pp_timer.h:26
Main include header for the SDL3pp library.
Safely wrap Environment for non owning parameters.
Definition: SDL3pp_stdinc.h:57
EnvironmentRaw value
parameter's EnvironmentRaw
Definition: SDL3pp_stdinc.h:58
constexpr EnvironmentParam(std::nullptr_t _=nullptr)
Constructs null/invalid.
Definition: SDL3pp_stdinc.h:67
constexpr EnvironmentParam(EnvironmentRaw value)
Constructs from EnvironmentRaw.
Definition: SDL3pp_stdinc.h:61
constexpr auto operator<=>(const EnvironmentParam &other) const =default
Comparison.
Semi-safe reference for Environment.
Definition: SDL3pp_stdinc.h:1172
EnvironmentRef(EnvironmentParam resource) noexcept
Constructs from EnvironmentParam.
Definition: SDL3pp_stdinc.h:1182
~EnvironmentRef()
Destructor.
Definition: SDL3pp_stdinc.h:1206
EnvironmentRef(EnvironmentRaw resource) noexcept
Constructs from EnvironmentParam.
Definition: SDL3pp_stdinc.h:1194
EnvironmentRef(const EnvironmentRef &other) noexcept
Copy constructor.
Definition: SDL3pp_stdinc.h:1200
Safely wrap IConv for non owning parameters.
Definition: SDL3pp_stdinc.h:93
constexpr IConvParam(IConvRaw value)
Constructs from IConvRaw.
Definition: SDL3pp_stdinc.h:97
constexpr IConvParam(std::nullptr_t _=nullptr)
Constructs null/invalid.
Definition: SDL3pp_stdinc.h:103
constexpr auto operator<=>(const IConvParam &other) const =default
Comparison.
IConvRaw value
parameter's IConvRaw
Definition: SDL3pp_stdinc.h:94
Semi-safe reference for IConv.
Definition: SDL3pp_stdinc.h:6011
~IConvRef()
Destructor.
Definition: SDL3pp_stdinc.h:6045
IConvRef(IConvParam resource) noexcept
Constructs from IConvParam.
Definition: SDL3pp_stdinc.h:6021
IConvRef(const IConvRef &other) noexcept
Copy constructor.
Definition: SDL3pp_stdinc.h:6039
IConvRef(IConvRaw resource) noexcept
Constructs from IConvParam.
Definition: SDL3pp_stdinc.h:6033