stdinc: Document number parsing APIs

This commit is contained in:
Carl Åstholm 2024-09-09 19:15:10 +02:00 committed by Sam Lantinga
parent eda459ac49
commit 8eb194b6f8

View file

@ -1475,6 +1475,30 @@ extern SDL_DECLSPEC int SDLCALL SDL_wcscasecmp(const wchar_t *str1, const wchar_
*/
extern SDL_DECLSPEC int SDLCALL SDL_wcsncasecmp(const wchar_t *str1, const wchar_t *str2, size_t maxlen);
/**
* Parse a `long` from a wide string.
*
* This function makes fewer guarantees than the C runtime `wcstol`:
*
* - Only the bases 10 and 16 are guaranteed to be supported. The behavior for other bases is unspecified.
* - It is unspecified what this function returns when the parsed integer does not fit inside a `long`.
*
* `str` and `endp` must not overlap.
*
* \param str The null-terminated wide string to read. Must not be NULL and must not overlap with `endp`.
* \param endp If not NULL, the address of the first invalid wide character
* (i.e. the next character after the parsed number) will be written to this pointer.
* Must not overlap with `dst`.
* \param base The base of the integer to read. The values 0, 10 and 16 are supported.
* If 0, the base will be inferred from the integer's prefix.
* \returns The parsed `long`.
*
* \threadsafety It is safe to call this function from any thread.
*
* \since This function is available since SDL 3.0.0.
*
* \sa SDL_strtol
*/
extern SDL_DECLSPEC long SDLCALL SDL_wcstol(const wchar_t *str, wchar_t **endp, int base);
extern SDL_DECLSPEC size_t SDLCALL SDL_strlen(const char *str);
@ -1616,12 +1640,211 @@ extern SDL_DECLSPEC char * SDLCALL SDL_ultoa(unsigned long value, char *str, int
extern SDL_DECLSPEC char * SDLCALL SDL_lltoa(Sint64 value, char *str, int radix);
extern SDL_DECLSPEC char * SDLCALL SDL_ulltoa(Uint64 value, char *str, int radix);
/**
* Parse an `int` from a string.
*
* The result of calling `SDL_atoi(str)` is equivalent to `(int)SDL_strtol(str, NULL, 10)`.
*
* \param str The null-terminated string to read. Must not be NULL.
* \returns The parsed `int`.
*
* \threadsafety It is safe to call this function from any thread.
*
* \since This function is available since SDL 3.0.0.
*
* \sa SDL_atof
* \sa SDL_strtol
* \sa SDL_strtoul
* \sa SDL_strtoll
* \sa SDL_strtoull
* \sa SDL_strtod
* \sa SDL_itoa
*/
extern SDL_DECLSPEC int SDLCALL SDL_atoi(const char *str);
/**
* Parse a `double` from a string.
*
* The result of calling `SDL_atoi(str)` is equivalent to `SDL_strtod(str, NULL)`.
*
* \param str The null-terminated string to read. Must not be NULL.
* \returns The parsed `double`.
*
* \threadsafety It is safe to call this function from any thread.
*
* \since This function is available since SDL 3.0.0.
*
* \sa SDL_atoi
* \sa SDL_strtol
* \sa SDL_strtoul
* \sa SDL_strtoll
* \sa SDL_strtoull
* \sa SDL_strtod
*/
extern SDL_DECLSPEC double SDLCALL SDL_atof(const char *str);
/**
* Parse a `long` from a string.
*
* This function makes fewer guarantees than the C runtime `strtol`:
*
* - Only the bases 10 and 16 are guaranteed to be supported. The behavior for other bases is unspecified.
* - It is unspecified what this function returns when the parsed integer does not fit inside a `long`.
*
* `str` and `endp` must not overlap.
*
* \param str The null-terminated string to read. Must not be NULL and must not overlap with `endp`.
* \param endp If not NULL, the address of the first invalid character
* (i.e. the next character after the parsed number) will be written to this pointer.
* Must not overlap with `dst`.
* \param base The base of the integer to read. The values 0, 10 and 16 are supported.
* If 0, the base will be inferred from the integer's prefix.
* \returns The parsed `long`.
*
* \threadsafety It is safe to call this function from any thread.
*
* \since This function is available since SDL 3.0.0.
*
* \sa SDL_atoi
* \sa SDL_atof
* \sa SDL_strtoul
* \sa SDL_strtoll
* \sa SDL_strtoull
* \sa SDL_strtod
* \sa SDL_ltoa
* \sa SDL_wcstol
*/
extern SDL_DECLSPEC long SDLCALL SDL_strtol(const char *str, char **endp, int base);
/**
* Parse an `unsigned long` from a string.
*
* This function makes fewer guarantees than the C runtime `strtoul`:
*
* - Only the bases 10 and 16 are guaranteed to be supported. The behavior for other bases is unspecified.
* - It is unspecified what this function returns when the parsed integer does not fit inside an `unsigned long`.
*
* `str` and `endp` must not overlap.
*
* \param str The null-terminated string to read. Must not be NULL and must not overlap with `endp`.
* \param endp If not NULL, the address of the first invalid character
* (i.e. the next character after the parsed number) will be written to this pointer.
* Must not overlap with `dst`.
* \param base The base of the integer to read. The values 0, 10 and 16 are supported.
* If 0, the base will be inferred from the integer's prefix.
* \returns The parsed `unsigned long`.
*
* \threadsafety It is safe to call this function from any thread.
*
* \since This function is available since SDL 3.0.0.
*
* \sa SDL_atoi
* \sa SDL_atof
* \sa SDL_strtol
* \sa SDL_strtoll
* \sa SDL_strtoull
* \sa SDL_strtod
* \sa SDL_ultoa
*/
extern SDL_DECLSPEC unsigned long SDLCALL SDL_strtoul(const char *str, char **endp, int base);
/**
* Parse an Sint64 from a string.
*
* This function makes fewer guarantees than the C runtime `strtoll`:
*
* - Only the bases 10 and 16 are guaranteed to be supported. The behavior for other bases is unspecified.
* - It is unspecified what this function returns when the parsed integer does not fit inside a `long long`.
*
* Also note that unlike the C runtime `strtoll`, this function returns an Sint64, not a `long long`.
*
* `str` and `endp` must not overlap.
*
* \param str The null-terminated string to read. Must not be NULL and must not overlap with `endp`.
* \param endp If not NULL, the address of the first invalid character
* (i.e. the next character after the parsed number) will be written to this pointer.
* Must not overlap with `dst`.
* \param base The base of the integer to read. The values 0, 10 and 16 are supported.
* If 0, the base will be inferred from the integer's prefix.
* \returns The parsed Sint64.
*
* \threadsafety It is safe to call this function from any thread.
*
* \since This function is available since SDL 3.0.0.
*
* \sa SDL_atoi
* \sa SDL_atof
* \sa SDL_strtol
* \sa SDL_strtoul
* \sa SDL_strtoull
* \sa SDL_strtod
* \sa SDL_lltoa
*/
extern SDL_DECLSPEC Sint64 SDLCALL SDL_strtoll(const char *str, char **endp, int base);
/**
* Parse a Uint64 from a string.
*
* This function makes fewer guarantees than the C runtime `strtoull`:
*
* - Only the bases 10 and 16 are guaranteed to be supported. The behavior for other bases is unspecified.
* - It is unspecified what this function returns when the parsed integer does not fit inside a `long long`.
*
* Also note that unlike the C runtime `strtoull`, this function returns a Uint64, not an `unsigned long long`.
*
* `str` and `endp` must not overlap.
*
* \param str The null-terminated string to read. Must not be NULL and must not overlap with `endp`.
* \param endp If not NULL, the address of the first invalid character
* (i.e. the next character after the parsed number) will be written to this pointer.
* Must not overlap with `dst`.
* \param base The base of the integer to read. The values 0, 10 and 16 are supported.
* If 0, the base will be inferred from the integer's prefix.
* \returns The parsed Uint64.
*
* \threadsafety It is safe to call this function from any thread.
*
* \since This function is available since SDL 3.0.0.
*
* \sa SDL_atoi
* \sa SDL_atof
* \sa SDL_strtol
* \sa SDL_strtoll
* \sa SDL_strtoul
* \sa SDL_strtod
* \sa SDL_ulltoa
*/
extern SDL_DECLSPEC Uint64 SDLCALL SDL_strtoull(const char *str, char **endp, int base);
/**
* Parse a `double` from a string.
*
* This function makes fewer guarantees than the C runtime `strtod`:
*
* - Only decimal notation is guaranteed to be supported.
* The handling of scientific and hexadecimal notation is unspecified.
* - Whether or not INF and NAN can be parsed is unspecified.
* - The precision of the result is unspecified.
*
* `str` and `endp` must not overlap.
*
* \param str The null-terminated string to read. Must not be NULL and must not overlap with `endp`.
* \param endp If not NULL, the address of the first invalid character
* (i.e. the next character after the parsed number) will be written to this pointer.
* Must not overlap with `dst`.
* \returns The parsed `double`.
*
* \threadsafety It is safe to call this function from any thread.
*
* \since This function is available since SDL 3.0.0.
*
* \sa SDL_atoi
* \sa SDL_atof
* \sa SDL_strtol
* \sa SDL_strtoll
* \sa SDL_strtoul
* \sa SDL_strtoull
*/
extern SDL_DECLSPEC double SDLCALL SDL_strtod(const char *str, char **endp);
/**