Mercurial > foo_out_sdl
comparison SDL3/SDL_iostream.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 |
comparison
equal
deleted
inserted
replaced
| 0:e9bb126753e7 | 1:20d02a178406 |
|---|---|
| 1 /* | |
| 2 Simple DirectMedia Layer | |
| 3 Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org> | |
| 4 | |
| 5 This software is provided 'as-is', without any express or implied | |
| 6 warranty. In no event will the authors be held liable for any damages | |
| 7 arising from the use of this software. | |
| 8 | |
| 9 Permission is granted to anyone to use this software for any purpose, | |
| 10 including commercial applications, and to alter it and redistribute it | |
| 11 freely, subject to the following restrictions: | |
| 12 | |
| 13 1. The origin of this software must not be misrepresented; you must not | |
| 14 claim that you wrote the original software. If you use this software | |
| 15 in a product, an acknowledgment in the product documentation would be | |
| 16 appreciated but is not required. | |
| 17 2. Altered source versions must be plainly marked as such, and must not be | |
| 18 misrepresented as being the original software. | |
| 19 3. This notice may not be removed or altered from any source distribution. | |
| 20 */ | |
| 21 | |
| 22 /* WIKI CATEGORY: IOStream */ | |
| 23 | |
| 24 /** | |
| 25 * # CategoryIOStream | |
| 26 * | |
| 27 * SDL provides an abstract interface for reading and writing data streams. It | |
| 28 * offers implementations for files, memory, etc, and the app can provide | |
| 29 * their own implementations, too. | |
| 30 * | |
| 31 * SDL_IOStream is not related to the standard C++ iostream class, other than | |
| 32 * both are abstract interfaces to read/write data. | |
| 33 */ | |
| 34 | |
| 35 #ifndef SDL_iostream_h_ | |
| 36 #define SDL_iostream_h_ | |
| 37 | |
| 38 #include <SDL3/SDL_stdinc.h> | |
| 39 #include <SDL3/SDL_error.h> | |
| 40 #include <SDL3/SDL_properties.h> | |
| 41 | |
| 42 #include <SDL3/SDL_begin_code.h> | |
| 43 /* Set up for C function definitions, even when using C++ */ | |
| 44 #ifdef __cplusplus | |
| 45 extern "C" { | |
| 46 #endif | |
| 47 | |
| 48 /** | |
| 49 * SDL_IOStream status, set by a read or write operation. | |
| 50 * | |
| 51 * \since This enum is available since SDL 3.2.0. | |
| 52 */ | |
| 53 typedef enum SDL_IOStatus | |
| 54 { | |
| 55 SDL_IO_STATUS_READY, /**< Everything is ready (no errors and not EOF). */ | |
| 56 SDL_IO_STATUS_ERROR, /**< Read or write I/O error */ | |
| 57 SDL_IO_STATUS_EOF, /**< End of file */ | |
| 58 SDL_IO_STATUS_NOT_READY, /**< Non blocking I/O, not ready */ | |
| 59 SDL_IO_STATUS_READONLY, /**< Tried to write a read-only buffer */ | |
| 60 SDL_IO_STATUS_WRITEONLY /**< Tried to read a write-only buffer */ | |
| 61 } SDL_IOStatus; | |
| 62 | |
| 63 /** | |
| 64 * Possible `whence` values for SDL_IOStream seeking. | |
| 65 * | |
| 66 * These map to the same "whence" concept that `fseek` or `lseek` use in the | |
| 67 * standard C runtime. | |
| 68 * | |
| 69 * \since This enum is available since SDL 3.2.0. | |
| 70 */ | |
| 71 typedef enum SDL_IOWhence | |
| 72 { | |
| 73 SDL_IO_SEEK_SET, /**< Seek from the beginning of data */ | |
| 74 SDL_IO_SEEK_CUR, /**< Seek relative to current read point */ | |
| 75 SDL_IO_SEEK_END /**< Seek relative to the end of data */ | |
| 76 } SDL_IOWhence; | |
| 77 | |
| 78 /** | |
| 79 * The function pointers that drive an SDL_IOStream. | |
| 80 * | |
| 81 * Applications can provide this struct to SDL_OpenIO() to create their own | |
| 82 * implementation of SDL_IOStream. This is not necessarily required, as SDL | |
| 83 * already offers several common types of I/O streams, via functions like | |
| 84 * SDL_IOFromFile() and SDL_IOFromMem(). | |
| 85 * | |
| 86 * This structure should be initialized using SDL_INIT_INTERFACE() | |
| 87 * | |
| 88 * \since This struct is available since SDL 3.2.0. | |
| 89 * | |
| 90 * \sa SDL_INIT_INTERFACE | |
| 91 */ | |
| 92 typedef struct SDL_IOStreamInterface | |
| 93 { | |
| 94 /* The version of this interface */ | |
| 95 Uint32 version; | |
| 96 | |
| 97 /** | |
| 98 * Return the number of bytes in this SDL_IOStream | |
| 99 * | |
| 100 * \return the total size of the data stream, or -1 on error. | |
| 101 */ | |
| 102 Sint64 (SDLCALL *size)(void *userdata); | |
| 103 | |
| 104 /** | |
| 105 * Seek to `offset` relative to `whence`, one of stdio's whence values: | |
| 106 * SDL_IO_SEEK_SET, SDL_IO_SEEK_CUR, SDL_IO_SEEK_END | |
| 107 * | |
| 108 * \return the final offset in the data stream, or -1 on error. | |
| 109 */ | |
| 110 Sint64 (SDLCALL *seek)(void *userdata, Sint64 offset, SDL_IOWhence whence); | |
| 111 | |
| 112 /** | |
| 113 * Read up to `size` bytes from the data stream to the area pointed | |
| 114 * at by `ptr`. `size` will always be > 0. | |
| 115 * | |
| 116 * On an incomplete read, you should set `*status` to a value from the | |
| 117 * SDL_IOStatus enum. You do not have to explicitly set this on | |
| 118 * a complete, successful read. | |
| 119 * | |
| 120 * \return the number of bytes read | |
| 121 */ | |
| 122 size_t (SDLCALL *read)(void *userdata, void *ptr, size_t size, SDL_IOStatus *status); | |
| 123 | |
| 124 /** | |
| 125 * Write exactly `size` bytes from the area pointed at by `ptr` | |
| 126 * to data stream. `size` will always be > 0. | |
| 127 * | |
| 128 * On an incomplete write, you should set `*status` to a value from the | |
| 129 * SDL_IOStatus enum. You do not have to explicitly set this on | |
| 130 * a complete, successful write. | |
| 131 * | |
| 132 * \return the number of bytes written | |
| 133 */ | |
| 134 size_t (SDLCALL *write)(void *userdata, const void *ptr, size_t size, SDL_IOStatus *status); | |
| 135 | |
| 136 /** | |
| 137 * If the stream is buffering, make sure the data is written out. | |
| 138 * | |
| 139 * On failure, you should set `*status` to a value from the | |
| 140 * SDL_IOStatus enum. You do not have to explicitly set this on | |
| 141 * a successful flush. | |
| 142 * | |
| 143 * \return true if successful or false on write error when flushing data. | |
| 144 */ | |
| 145 bool (SDLCALL *flush)(void *userdata, SDL_IOStatus *status); | |
| 146 | |
| 147 /** | |
| 148 * Close and free any allocated resources. | |
| 149 * | |
| 150 * This does not guarantee file writes will sync to physical media; they | |
| 151 * can be in the system's file cache, waiting to go to disk. | |
| 152 * | |
| 153 * The SDL_IOStream is still destroyed even if this fails, so clean up anything | |
| 154 * even if flushing buffers, etc, returns an error. | |
| 155 * | |
| 156 * \return true if successful or false on write error when flushing data. | |
| 157 */ | |
| 158 bool (SDLCALL *close)(void *userdata); | |
| 159 | |
| 160 } SDL_IOStreamInterface; | |
| 161 | |
| 162 /* Check the size of SDL_IOStreamInterface | |
| 163 * | |
| 164 * If this assert fails, either the compiler is padding to an unexpected size, | |
| 165 * or the interface has been updated and this should be updated to match and | |
| 166 * the code using this interface should be updated to handle the old version. | |
| 167 */ | |
| 168 SDL_COMPILE_TIME_ASSERT(SDL_IOStreamInterface_SIZE, | |
| 169 (sizeof(void *) == 4 && sizeof(SDL_IOStreamInterface) == 28) || | |
| 170 (sizeof(void *) == 8 && sizeof(SDL_IOStreamInterface) == 56)); | |
| 171 | |
| 172 /** | |
| 173 * The read/write operation structure. | |
| 174 * | |
| 175 * This operates as an opaque handle. There are several APIs to create various | |
| 176 * types of I/O streams, or an app can supply an SDL_IOStreamInterface to | |
| 177 * SDL_OpenIO() to provide their own stream implementation behind this | |
| 178 * struct's abstract interface. | |
| 179 * | |
| 180 * \since This struct is available since SDL 3.2.0. | |
| 181 */ | |
| 182 typedef struct SDL_IOStream SDL_IOStream; | |
| 183 | |
| 184 | |
| 185 /** | |
| 186 * \name IOFrom functions | |
| 187 * | |
| 188 * Functions to create SDL_IOStream structures from various data streams. | |
| 189 */ | |
| 190 /* @{ */ | |
| 191 | |
| 192 /** | |
| 193 * Use this function to create a new SDL_IOStream structure for reading from | |
| 194 * and/or writing to a named file. | |
| 195 * | |
| 196 * The `mode` string is treated roughly the same as in a call to the C | |
| 197 * library's fopen(), even if SDL doesn't happen to use fopen() behind the | |
| 198 * scenes. | |
| 199 * | |
| 200 * Available `mode` strings: | |
| 201 * | |
| 202 * - "r": Open a file for reading. The file must exist. | |
| 203 * - "w": Create an empty file for writing. If a file with the same name | |
| 204 * already exists its content is erased and the file is treated as a new | |
| 205 * empty file. | |
| 206 * - "wx": Create an empty file for writing. If a file with the same name | |
| 207 * already exists, the call fails. | |
| 208 * - "a": Append to a file. Writing operations append data at the end of the | |
| 209 * file. The file is created if it does not exist. | |
| 210 * - "r+": Open a file for update both reading and writing. The file must | |
| 211 * exist. | |
| 212 * - "w+": Create an empty file for both reading and writing. If a file with | |
| 213 * the same name already exists its content is erased and the file is | |
| 214 * treated as a new empty file. | |
| 215 * - "w+x": Create an empty file for both reading and writing. If a file with | |
| 216 * the same name already exists, the call fails. | |
| 217 * - "a+": Open a file for reading and appending. All writing operations are | |
| 218 * performed at the end of the file, protecting the previous content to be | |
| 219 * overwritten. You can reposition (fseek, rewind) the internal pointer to | |
| 220 * anywhere in the file for reading, but writing operations will move it | |
| 221 * back to the end of file. The file is created if it does not exist. | |
| 222 * | |
| 223 * **NOTE**: In order to open a file as a binary file, a "b" character has to | |
| 224 * be included in the `mode` string. This additional "b" character can either | |
| 225 * be appended at the end of the string (thus making the following compound | |
| 226 * modes: "rb", "wb", "ab", "r+b", "w+b", "a+b") or be inserted between the | |
| 227 * letter and the "+" sign for the mixed modes ("rb+", "wb+", "ab+"). | |
| 228 * Additional characters may follow the sequence, although they should have no | |
| 229 * effect. For example, "t" is sometimes appended to make explicit the file is | |
| 230 * a text file. | |
| 231 * | |
| 232 * This function supports Unicode filenames, but they must be encoded in UTF-8 | |
| 233 * format, regardless of the underlying operating system. | |
| 234 * | |
| 235 * In Android, SDL_IOFromFile() can be used to open content:// URIs. As a | |
| 236 * fallback, SDL_IOFromFile() will transparently open a matching filename in | |
| 237 * the app's `assets`. | |
| 238 * | |
| 239 * Closing the SDL_IOStream will close SDL's internal file handle. | |
| 240 * | |
| 241 * The following properties may be set at creation time by SDL: | |
| 242 * | |
| 243 * - `SDL_PROP_IOSTREAM_WINDOWS_HANDLE_POINTER`: a pointer, that can be cast | |
| 244 * to a win32 `HANDLE`, that this SDL_IOStream is using to access the | |
| 245 * filesystem. If the program isn't running on Windows, or SDL used some | |
| 246 * other method to access the filesystem, this property will not be set. | |
| 247 * - `SDL_PROP_IOSTREAM_STDIO_FILE_POINTER`: a pointer, that can be cast to a | |
| 248 * stdio `FILE *`, that this SDL_IOStream is using to access the filesystem. | |
| 249 * If SDL used some other method to access the filesystem, this property | |
| 250 * will not be set. PLEASE NOTE that if SDL is using a different C runtime | |
| 251 * than your app, trying to use this pointer will almost certainly result in | |
| 252 * a crash! This is mostly a problem on Windows; make sure you build SDL and | |
| 253 * your app with the same compiler and settings to avoid it. | |
| 254 * - `SDL_PROP_IOSTREAM_FILE_DESCRIPTOR_NUMBER`: a file descriptor that this | |
| 255 * SDL_IOStream is using to access the filesystem. | |
| 256 * - `SDL_PROP_IOSTREAM_ANDROID_AASSET_POINTER`: a pointer, that can be cast | |
| 257 * to an Android NDK `AAsset *`, that this SDL_IOStream is using to access | |
| 258 * the filesystem. If SDL used some other method to access the filesystem, | |
| 259 * this property will not be set. | |
| 260 * | |
| 261 * \param file a UTF-8 string representing the filename to open. | |
| 262 * \param mode an ASCII string representing the mode to be used for opening | |
| 263 * the file. | |
| 264 * \returns a pointer to the SDL_IOStream structure that is created or NULL on | |
| 265 * failure; call SDL_GetError() for more information. | |
| 266 * | |
| 267 * \threadsafety It is safe to call this function from any thread. | |
| 268 * | |
| 269 * \since This function is available since SDL 3.2.0. | |
| 270 * | |
| 271 * \sa SDL_CloseIO | |
| 272 * \sa SDL_FlushIO | |
| 273 * \sa SDL_ReadIO | |
| 274 * \sa SDL_SeekIO | |
| 275 * \sa SDL_TellIO | |
| 276 * \sa SDL_WriteIO | |
| 277 */ | |
| 278 extern SDL_DECLSPEC SDL_IOStream * SDLCALL SDL_IOFromFile(const char *file, const char *mode); | |
| 279 | |
| 280 #define SDL_PROP_IOSTREAM_WINDOWS_HANDLE_POINTER "SDL.iostream.windows.handle" | |
| 281 #define SDL_PROP_IOSTREAM_STDIO_FILE_POINTER "SDL.iostream.stdio.file" | |
| 282 #define SDL_PROP_IOSTREAM_FILE_DESCRIPTOR_NUMBER "SDL.iostream.file_descriptor" | |
| 283 #define SDL_PROP_IOSTREAM_ANDROID_AASSET_POINTER "SDL.iostream.android.aasset" | |
| 284 | |
| 285 /** | |
| 286 * Use this function to prepare a read-write memory buffer for use with | |
| 287 * SDL_IOStream. | |
| 288 * | |
| 289 * This function sets up an SDL_IOStream struct based on a memory area of a | |
| 290 * certain size, for both read and write access. | |
| 291 * | |
| 292 * This memory buffer is not copied by the SDL_IOStream; the pointer you | |
| 293 * provide must remain valid until you close the stream. | |
| 294 * | |
| 295 * If you need to make sure the SDL_IOStream never writes to the memory | |
| 296 * buffer, you should use SDL_IOFromConstMem() with a read-only buffer of | |
| 297 * memory instead. | |
| 298 * | |
| 299 * The following properties will be set at creation time by SDL: | |
| 300 * | |
| 301 * - `SDL_PROP_IOSTREAM_MEMORY_POINTER`: this will be the `mem` parameter that | |
| 302 * was passed to this function. | |
| 303 * - `SDL_PROP_IOSTREAM_MEMORY_SIZE_NUMBER`: this will be the `size` parameter | |
| 304 * that was passed to this function. | |
| 305 * | |
| 306 * Additionally, the following properties are recognized: | |
| 307 * | |
| 308 * - `SDL_PROP_IOSTREAM_MEMORY_FREE_FUNC_POINTER`: if this property is set to | |
| 309 * a non-NULL value it will be interpreted as a function of SDL_free_func | |
| 310 * type and called with the passed `mem` pointer when closing the stream. By | |
| 311 * default it is unset, i.e., the memory will not be freed. | |
| 312 * | |
| 313 * \param mem a pointer to a buffer to feed an SDL_IOStream stream. | |
| 314 * \param size the buffer size, in bytes. | |
| 315 * \returns a pointer to a new SDL_IOStream structure or NULL on failure; call | |
| 316 * SDL_GetError() for more information. | |
| 317 * | |
| 318 * \threadsafety It is safe to call this function from any thread. | |
| 319 * | |
| 320 * \since This function is available since SDL 3.2.0. | |
| 321 * | |
| 322 * \sa SDL_IOFromConstMem | |
| 323 * \sa SDL_CloseIO | |
| 324 * \sa SDL_FlushIO | |
| 325 * \sa SDL_ReadIO | |
| 326 * \sa SDL_SeekIO | |
| 327 * \sa SDL_TellIO | |
| 328 * \sa SDL_WriteIO | |
| 329 */ | |
| 330 extern SDL_DECLSPEC SDL_IOStream * SDLCALL SDL_IOFromMem(void *mem, size_t size); | |
| 331 | |
| 332 #define SDL_PROP_IOSTREAM_MEMORY_POINTER "SDL.iostream.memory.base" | |
| 333 #define SDL_PROP_IOSTREAM_MEMORY_SIZE_NUMBER "SDL.iostream.memory.size" | |
| 334 #define SDL_PROP_IOSTREAM_MEMORY_FREE_FUNC_POINTER "SDL.iostream.memory.free" | |
| 335 | |
| 336 /** | |
| 337 * Use this function to prepare a read-only memory buffer for use with | |
| 338 * SDL_IOStream. | |
| 339 * | |
| 340 * This function sets up an SDL_IOStream struct based on a memory area of a | |
| 341 * certain size. It assumes the memory area is not writable. | |
| 342 * | |
| 343 * Attempting to write to this SDL_IOStream stream will report an error | |
| 344 * without writing to the memory buffer. | |
| 345 * | |
| 346 * This memory buffer is not copied by the SDL_IOStream; the pointer you | |
| 347 * provide must remain valid until you close the stream. | |
| 348 * | |
| 349 * If you need to write to a memory buffer, you should use SDL_IOFromMem() | |
| 350 * with a writable buffer of memory instead. | |
| 351 * | |
| 352 * The following properties will be set at creation time by SDL: | |
| 353 * | |
| 354 * - `SDL_PROP_IOSTREAM_MEMORY_POINTER`: this will be the `mem` parameter that | |
| 355 * was passed to this function. | |
| 356 * - `SDL_PROP_IOSTREAM_MEMORY_SIZE_NUMBER`: this will be the `size` parameter | |
| 357 * that was passed to this function. | |
| 358 * | |
| 359 * Additionally, the following properties are recognized: | |
| 360 * | |
| 361 * - `SDL_PROP_IOSTREAM_MEMORY_FREE_FUNC_POINTER`: if this property is set to | |
| 362 * a non-NULL value it will be interpreted as a function of SDL_free_func | |
| 363 * type and called with the passed `mem` pointer when closing the stream. By | |
| 364 * default it is unset, i.e., the memory will not be freed. | |
| 365 * | |
| 366 * \param mem a pointer to a read-only buffer to feed an SDL_IOStream stream. | |
| 367 * \param size the buffer size, in bytes. | |
| 368 * \returns a pointer to a new SDL_IOStream structure or NULL on failure; call | |
| 369 * SDL_GetError() for more information. | |
| 370 * | |
| 371 * \threadsafety It is safe to call this function from any thread. | |
| 372 * | |
| 373 * \since This function is available since SDL 3.2.0. | |
| 374 * | |
| 375 * \sa SDL_IOFromMem | |
| 376 * \sa SDL_CloseIO | |
| 377 * \sa SDL_ReadIO | |
| 378 * \sa SDL_SeekIO | |
| 379 * \sa SDL_TellIO | |
| 380 */ | |
| 381 extern SDL_DECLSPEC SDL_IOStream * SDLCALL SDL_IOFromConstMem(const void *mem, size_t size); | |
| 382 | |
| 383 /** | |
| 384 * Use this function to create an SDL_IOStream that is backed by dynamically | |
| 385 * allocated memory. | |
| 386 * | |
| 387 * This supports the following properties to provide access to the memory and | |
| 388 * control over allocations: | |
| 389 * | |
| 390 * - `SDL_PROP_IOSTREAM_DYNAMIC_MEMORY_POINTER`: a pointer to the internal | |
| 391 * memory of the stream. This can be set to NULL to transfer ownership of | |
| 392 * the memory to the application, which should free the memory with | |
| 393 * SDL_free(). If this is done, the next operation on the stream must be | |
| 394 * SDL_CloseIO(). | |
| 395 * - `SDL_PROP_IOSTREAM_DYNAMIC_CHUNKSIZE_NUMBER`: memory will be allocated in | |
| 396 * multiples of this size, defaulting to 1024. | |
| 397 * | |
| 398 * \returns a pointer to a new SDL_IOStream structure or NULL on failure; call | |
| 399 * SDL_GetError() for more information. | |
| 400 * | |
| 401 * \threadsafety It is safe to call this function from any thread. | |
| 402 * | |
| 403 * \since This function is available since SDL 3.2.0. | |
| 404 * | |
| 405 * \sa SDL_CloseIO | |
| 406 * \sa SDL_ReadIO | |
| 407 * \sa SDL_SeekIO | |
| 408 * \sa SDL_TellIO | |
| 409 * \sa SDL_WriteIO | |
| 410 */ | |
| 411 extern SDL_DECLSPEC SDL_IOStream * SDLCALL SDL_IOFromDynamicMem(void); | |
| 412 | |
| 413 #define SDL_PROP_IOSTREAM_DYNAMIC_MEMORY_POINTER "SDL.iostream.dynamic.memory" | |
| 414 #define SDL_PROP_IOSTREAM_DYNAMIC_CHUNKSIZE_NUMBER "SDL.iostream.dynamic.chunksize" | |
| 415 | |
| 416 /* @} *//* IOFrom functions */ | |
| 417 | |
| 418 | |
| 419 /** | |
| 420 * Create a custom SDL_IOStream. | |
| 421 * | |
| 422 * Applications do not need to use this function unless they are providing | |
| 423 * their own SDL_IOStream implementation. If you just need an SDL_IOStream to | |
| 424 * read/write a common data source, you should use the built-in | |
| 425 * implementations in SDL, like SDL_IOFromFile() or SDL_IOFromMem(), etc. | |
| 426 * | |
| 427 * This function makes a copy of `iface` and the caller does not need to keep | |
| 428 * it around after this call. | |
| 429 * | |
| 430 * \param iface the interface that implements this SDL_IOStream, initialized | |
| 431 * using SDL_INIT_INTERFACE(). | |
| 432 * \param userdata the pointer that will be passed to the interface functions. | |
| 433 * \returns a pointer to the allocated memory on success or NULL on failure; | |
| 434 * call SDL_GetError() for more information. | |
| 435 * | |
| 436 * \threadsafety It is safe to call this function from any thread. | |
| 437 * | |
| 438 * \since This function is available since SDL 3.2.0. | |
| 439 * | |
| 440 * \sa SDL_CloseIO | |
| 441 * \sa SDL_INIT_INTERFACE | |
| 442 * \sa SDL_IOFromConstMem | |
| 443 * \sa SDL_IOFromFile | |
| 444 * \sa SDL_IOFromMem | |
| 445 */ | |
| 446 extern SDL_DECLSPEC SDL_IOStream * SDLCALL SDL_OpenIO(const SDL_IOStreamInterface *iface, void *userdata); | |
| 447 | |
| 448 /** | |
| 449 * Close and free an allocated SDL_IOStream structure. | |
| 450 * | |
| 451 * SDL_CloseIO() closes and cleans up the SDL_IOStream stream. It releases any | |
| 452 * resources used by the stream and frees the SDL_IOStream itself. This | |
| 453 * returns true on success, or false if the stream failed to flush to its | |
| 454 * output (e.g. to disk). | |
| 455 * | |
| 456 * Note that if this fails to flush the stream for any reason, this function | |
| 457 * reports an error, but the SDL_IOStream is still invalid once this function | |
| 458 * returns. | |
| 459 * | |
| 460 * This call flushes any buffered writes to the operating system, but there | |
| 461 * are no guarantees that those writes have gone to physical media; they might | |
| 462 * be in the OS's file cache, waiting to go to disk later. If it's absolutely | |
| 463 * crucial that writes go to disk immediately, so they are definitely stored | |
| 464 * even if the power fails before the file cache would have caught up, one | |
| 465 * should call SDL_FlushIO() before closing. Note that flushing takes time and | |
| 466 * makes the system and your app operate less efficiently, so do so sparingly. | |
| 467 * | |
| 468 * \param context SDL_IOStream structure to close. | |
| 469 * \returns true on success or false on failure; call SDL_GetError() for more | |
| 470 * information. | |
| 471 * | |
| 472 * \threadsafety Do not use the same SDL_IOStream from two threads at once. | |
| 473 * | |
| 474 * \since This function is available since SDL 3.2.0. | |
| 475 * | |
| 476 * \sa SDL_OpenIO | |
| 477 */ | |
| 478 extern SDL_DECLSPEC bool SDLCALL SDL_CloseIO(SDL_IOStream *context); | |
| 479 | |
| 480 /** | |
| 481 * Get the properties associated with an SDL_IOStream. | |
| 482 * | |
| 483 * \param context a pointer to an SDL_IOStream structure. | |
| 484 * \returns a valid property ID on success or 0 on failure; call | |
| 485 * SDL_GetError() for more information. | |
| 486 * | |
| 487 * \threadsafety Do not use the same SDL_IOStream from two threads at once. | |
| 488 * | |
| 489 * \since This function is available since SDL 3.2.0. | |
| 490 */ | |
| 491 extern SDL_DECLSPEC SDL_PropertiesID SDLCALL SDL_GetIOProperties(SDL_IOStream *context); | |
| 492 | |
| 493 /** | |
| 494 * Query the stream status of an SDL_IOStream. | |
| 495 * | |
| 496 * This information can be useful to decide if a short read or write was due | |
| 497 * to an error, an EOF, or a non-blocking operation that isn't yet ready to | |
| 498 * complete. | |
| 499 * | |
| 500 * An SDL_IOStream's status is only expected to change after a SDL_ReadIO or | |
| 501 * SDL_WriteIO call; don't expect it to change if you just call this query | |
| 502 * function in a tight loop. | |
| 503 * | |
| 504 * \param context the SDL_IOStream to query. | |
| 505 * \returns an SDL_IOStatus enum with the current state. | |
| 506 * | |
| 507 * \threadsafety Do not use the same SDL_IOStream from two threads at once. | |
| 508 * | |
| 509 * \since This function is available since SDL 3.2.0. | |
| 510 */ | |
| 511 extern SDL_DECLSPEC SDL_IOStatus SDLCALL SDL_GetIOStatus(SDL_IOStream *context); | |
| 512 | |
| 513 /** | |
| 514 * Use this function to get the size of the data stream in an SDL_IOStream. | |
| 515 * | |
| 516 * \param context the SDL_IOStream to get the size of the data stream from. | |
| 517 * \returns the size of the data stream in the SDL_IOStream on success or a | |
| 518 * negative error code on failure; call SDL_GetError() for more | |
| 519 * information. | |
| 520 * | |
| 521 * \threadsafety Do not use the same SDL_IOStream from two threads at once. | |
| 522 * | |
| 523 * \since This function is available since SDL 3.2.0. | |
| 524 */ | |
| 525 extern SDL_DECLSPEC Sint64 SDLCALL SDL_GetIOSize(SDL_IOStream *context); | |
| 526 | |
| 527 /** | |
| 528 * Seek within an SDL_IOStream data stream. | |
| 529 * | |
| 530 * This function seeks to byte `offset`, relative to `whence`. | |
| 531 * | |
| 532 * `whence` may be any of the following values: | |
| 533 * | |
| 534 * - `SDL_IO_SEEK_SET`: seek from the beginning of data | |
| 535 * - `SDL_IO_SEEK_CUR`: seek relative to current read point | |
| 536 * - `SDL_IO_SEEK_END`: seek relative to the end of data | |
| 537 * | |
| 538 * If this stream can not seek, it will return -1. | |
| 539 * | |
| 540 * \param context a pointer to an SDL_IOStream structure. | |
| 541 * \param offset an offset in bytes, relative to `whence` location; can be | |
| 542 * negative. | |
| 543 * \param whence any of `SDL_IO_SEEK_SET`, `SDL_IO_SEEK_CUR`, | |
| 544 * `SDL_IO_SEEK_END`. | |
| 545 * \returns the final offset in the data stream after the seek or -1 on | |
| 546 * failure; call SDL_GetError() for more information. | |
| 547 * | |
| 548 * \threadsafety Do not use the same SDL_IOStream from two threads at once. | |
| 549 * | |
| 550 * \since This function is available since SDL 3.2.0. | |
| 551 * | |
| 552 * \sa SDL_TellIO | |
| 553 */ | |
| 554 extern SDL_DECLSPEC Sint64 SDLCALL SDL_SeekIO(SDL_IOStream *context, Sint64 offset, SDL_IOWhence whence); | |
| 555 | |
| 556 /** | |
| 557 * Determine the current read/write offset in an SDL_IOStream data stream. | |
| 558 * | |
| 559 * SDL_TellIO is actually a wrapper function that calls the SDL_IOStream's | |
| 560 * `seek` method, with an offset of 0 bytes from `SDL_IO_SEEK_CUR`, to | |
| 561 * simplify application development. | |
| 562 * | |
| 563 * \param context an SDL_IOStream data stream object from which to get the | |
| 564 * current offset. | |
| 565 * \returns the current offset in the stream, or -1 if the information can not | |
| 566 * be determined. | |
| 567 * | |
| 568 * \threadsafety Do not use the same SDL_IOStream from two threads at once. | |
| 569 * | |
| 570 * \since This function is available since SDL 3.2.0. | |
| 571 * | |
| 572 * \sa SDL_SeekIO | |
| 573 */ | |
| 574 extern SDL_DECLSPEC Sint64 SDLCALL SDL_TellIO(SDL_IOStream *context); | |
| 575 | |
| 576 /** | |
| 577 * Read from a data source. | |
| 578 * | |
| 579 * This function reads up `size` bytes from the data source to the area | |
| 580 * pointed at by `ptr`. This function may read less bytes than requested. | |
| 581 * | |
| 582 * This function will return zero when the data stream is completely read, and | |
| 583 * SDL_GetIOStatus() will return SDL_IO_STATUS_EOF. If zero is returned and | |
| 584 * the stream is not at EOF, SDL_GetIOStatus() will return a different error | |
| 585 * value and SDL_GetError() will offer a human-readable message. | |
| 586 * | |
| 587 * A request for zero bytes on a valid stream will return zero immediately | |
| 588 * without accessing the stream, so the stream status (EOF, err, etc) will not | |
| 589 * change. | |
| 590 * | |
| 591 * \param context a pointer to an SDL_IOStream structure. | |
| 592 * \param ptr a pointer to a buffer to read data into. | |
| 593 * \param size the number of bytes to read from the data source. | |
| 594 * \returns the number of bytes read, or 0 on end of file or other failure; | |
| 595 * call SDL_GetError() for more information. | |
| 596 * | |
| 597 * \threadsafety Do not use the same SDL_IOStream from two threads at once. | |
| 598 * | |
| 599 * \since This function is available since SDL 3.2.0. | |
| 600 * | |
| 601 * \sa SDL_WriteIO | |
| 602 * \sa SDL_GetIOStatus | |
| 603 */ | |
| 604 extern SDL_DECLSPEC size_t SDLCALL SDL_ReadIO(SDL_IOStream *context, void *ptr, size_t size); | |
| 605 | |
| 606 /** | |
| 607 * Write to an SDL_IOStream data stream. | |
| 608 * | |
| 609 * This function writes exactly `size` bytes from the area pointed at by `ptr` | |
| 610 * to the stream. If this fails for any reason, it'll return less than `size` | |
| 611 * to demonstrate how far the write progressed. On success, it returns `size`. | |
| 612 * | |
| 613 * On error, this function still attempts to write as much as possible, so it | |
| 614 * might return a positive value less than the requested write size. | |
| 615 * | |
| 616 * The caller can use SDL_GetIOStatus() to determine if the problem is | |
| 617 * recoverable, such as a non-blocking write that can simply be retried later, | |
| 618 * or a fatal error. | |
| 619 * | |
| 620 * A request for zero bytes on a valid stream will return zero immediately | |
| 621 * without accessing the stream, so the stream status (EOF, err, etc) will not | |
| 622 * change. | |
| 623 * | |
| 624 * \param context a pointer to an SDL_IOStream structure. | |
| 625 * \param ptr a pointer to a buffer containing data to write. | |
| 626 * \param size the number of bytes to write. | |
| 627 * \returns the number of bytes written, which will be less than `size` on | |
| 628 * failure; call SDL_GetError() for more information. | |
| 629 * | |
| 630 * \threadsafety Do not use the same SDL_IOStream from two threads at once. | |
| 631 * | |
| 632 * \since This function is available since SDL 3.2.0. | |
| 633 * | |
| 634 * \sa SDL_IOprintf | |
| 635 * \sa SDL_ReadIO | |
| 636 * \sa SDL_SeekIO | |
| 637 * \sa SDL_FlushIO | |
| 638 * \sa SDL_GetIOStatus | |
| 639 */ | |
| 640 extern SDL_DECLSPEC size_t SDLCALL SDL_WriteIO(SDL_IOStream *context, const void *ptr, size_t size); | |
| 641 | |
| 642 /** | |
| 643 * Print to an SDL_IOStream data stream. | |
| 644 * | |
| 645 * This function does formatted printing to the stream. | |
| 646 * | |
| 647 * \param context a pointer to an SDL_IOStream structure. | |
| 648 * \param fmt a printf() style format string. | |
| 649 * \param ... additional parameters matching % tokens in the `fmt` string, if | |
| 650 * any. | |
| 651 * \returns the number of bytes written or 0 on failure; call SDL_GetError() | |
| 652 * for more information. | |
| 653 * | |
| 654 * \threadsafety Do not use the same SDL_IOStream from two threads at once. | |
| 655 * | |
| 656 * \since This function is available since SDL 3.2.0. | |
| 657 * | |
| 658 * \sa SDL_IOvprintf | |
| 659 * \sa SDL_WriteIO | |
| 660 */ | |
| 661 extern SDL_DECLSPEC size_t SDLCALL SDL_IOprintf(SDL_IOStream *context, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(2); | |
| 662 | |
| 663 /** | |
| 664 * Print to an SDL_IOStream data stream. | |
| 665 * | |
| 666 * This function does formatted printing to the stream. | |
| 667 * | |
| 668 * \param context a pointer to an SDL_IOStream structure. | |
| 669 * \param fmt a printf() style format string. | |
| 670 * \param ap a variable argument list. | |
| 671 * \returns the number of bytes written or 0 on failure; call SDL_GetError() | |
| 672 * for more information. | |
| 673 * | |
| 674 * \threadsafety Do not use the same SDL_IOStream from two threads at once. | |
| 675 * | |
| 676 * \since This function is available since SDL 3.2.0. | |
| 677 * | |
| 678 * \sa SDL_IOprintf | |
| 679 * \sa SDL_WriteIO | |
| 680 */ | |
| 681 extern SDL_DECLSPEC size_t SDLCALL SDL_IOvprintf(SDL_IOStream *context, SDL_PRINTF_FORMAT_STRING const char *fmt, va_list ap) SDL_PRINTF_VARARG_FUNCV(2); | |
| 682 | |
| 683 /** | |
| 684 * Flush any buffered data in the stream. | |
| 685 * | |
| 686 * This function makes sure that any buffered data is written to the stream. | |
| 687 * Normally this isn't necessary but if the stream is a pipe or socket it | |
| 688 * guarantees that any pending data is sent. | |
| 689 * | |
| 690 * \param context SDL_IOStream structure to flush. | |
| 691 * \returns true on success or false on failure; call SDL_GetError() for more | |
| 692 * information. | |
| 693 * | |
| 694 * \threadsafety Do not use the same SDL_IOStream from two threads at once. | |
| 695 * | |
| 696 * \since This function is available since SDL 3.2.0. | |
| 697 * | |
| 698 * \sa SDL_OpenIO | |
| 699 * \sa SDL_WriteIO | |
| 700 */ | |
| 701 extern SDL_DECLSPEC bool SDLCALL SDL_FlushIO(SDL_IOStream *context); | |
| 702 | |
| 703 /** | |
| 704 * Load all the data from an SDL data stream. | |
| 705 * | |
| 706 * The data is allocated with a zero byte at the end (null terminated) for | |
| 707 * convenience. This extra byte is not included in the value reported via | |
| 708 * `datasize`. | |
| 709 * | |
| 710 * The data should be freed with SDL_free(). | |
| 711 * | |
| 712 * \param src the SDL_IOStream to read all available data from. | |
| 713 * \param datasize a pointer filled in with the number of bytes read, may be | |
| 714 * NULL. | |
| 715 * \param closeio if true, calls SDL_CloseIO() on `src` before returning, even | |
| 716 * in the case of an error. | |
| 717 * \returns the data or NULL on failure; call SDL_GetError() for more | |
| 718 * information. | |
| 719 * | |
| 720 * \threadsafety Do not use the same SDL_IOStream from two threads at once. | |
| 721 * | |
| 722 * \since This function is available since SDL 3.2.0. | |
| 723 * | |
| 724 * \sa SDL_LoadFile | |
| 725 * \sa SDL_SaveFile_IO | |
| 726 */ | |
| 727 extern SDL_DECLSPEC void * SDLCALL SDL_LoadFile_IO(SDL_IOStream *src, size_t *datasize, bool closeio); | |
| 728 | |
| 729 /** | |
| 730 * Load all the data from a file path. | |
| 731 * | |
| 732 * The data is allocated with a zero byte at the end (null terminated) for | |
| 733 * convenience. This extra byte is not included in the value reported via | |
| 734 * `datasize`. | |
| 735 * | |
| 736 * The data should be freed with SDL_free(). | |
| 737 * | |
| 738 * \param file the path to read all available data from. | |
| 739 * \param datasize if not NULL, will store the number of bytes read. | |
| 740 * \returns the data or NULL on failure; call SDL_GetError() for more | |
| 741 * information. | |
| 742 * | |
| 743 * \threadsafety It is safe to call this function from any thread. | |
| 744 * | |
| 745 * \since This function is available since SDL 3.2.0. | |
| 746 * | |
| 747 * \sa SDL_LoadFile_IO | |
| 748 * \sa SDL_SaveFile | |
| 749 */ | |
| 750 extern SDL_DECLSPEC void * SDLCALL SDL_LoadFile(const char *file, size_t *datasize); | |
| 751 | |
| 752 /** | |
| 753 * Save all the data into an SDL data stream. | |
| 754 * | |
| 755 * \param src the SDL_IOStream to write all data to. | |
| 756 * \param data the data to be written. If datasize is 0, may be NULL or a | |
| 757 * invalid pointer. | |
| 758 * \param datasize the number of bytes to be written. | |
| 759 * \param closeio if true, calls SDL_CloseIO() on `src` before returning, even | |
| 760 * in the case of an error. | |
| 761 * \returns true on success or false on failure; call SDL_GetError() for more | |
| 762 * information. | |
| 763 * | |
| 764 * \threadsafety Do not use the same SDL_IOStream from two threads at once. | |
| 765 * | |
| 766 * \since This function is available since SDL 3.2.0. | |
| 767 * | |
| 768 * \sa SDL_SaveFile | |
| 769 * \sa SDL_LoadFile_IO | |
| 770 */ | |
| 771 extern SDL_DECLSPEC bool SDLCALL SDL_SaveFile_IO(SDL_IOStream *src, const void *data, size_t datasize, bool closeio); | |
| 772 | |
| 773 /** | |
| 774 * Save all the data into a file path. | |
| 775 * | |
| 776 * \param file the path to write all available data into. | |
| 777 * \param data the data to be written. If datasize is 0, may be NULL or a | |
| 778 * invalid pointer. | |
| 779 * \param datasize the number of bytes to be written. | |
| 780 * \returns true on success or false on failure; call SDL_GetError() for more | |
| 781 * information. | |
| 782 * | |
| 783 * \threadsafety It is safe to call this function from any thread. | |
| 784 * | |
| 785 * \since This function is available since SDL 3.2.0. | |
| 786 * | |
| 787 * \sa SDL_SaveFile_IO | |
| 788 * \sa SDL_LoadFile | |
| 789 */ | |
| 790 extern SDL_DECLSPEC bool SDLCALL SDL_SaveFile(const char *file, const void *data, size_t datasize); | |
| 791 | |
| 792 /** | |
| 793 * \name Read endian functions | |
| 794 * | |
| 795 * Read an item of the specified endianness and return in native format. | |
| 796 */ | |
| 797 /* @{ */ | |
| 798 | |
| 799 /** | |
| 800 * Use this function to read a byte from an SDL_IOStream. | |
| 801 * | |
| 802 * This function will return false when the data stream is completely read, | |
| 803 * and SDL_GetIOStatus() will return SDL_IO_STATUS_EOF. If false is returned | |
| 804 * and the stream is not at EOF, SDL_GetIOStatus() will return a different | |
| 805 * error value and SDL_GetError() will offer a human-readable message. | |
| 806 * | |
| 807 * \param src the SDL_IOStream to read from. | |
| 808 * \param value a pointer filled in with the data read. | |
| 809 * \returns true on success or false on failure or EOF; call SDL_GetError() | |
| 810 * for more information. | |
| 811 * | |
| 812 * \threadsafety Do not use the same SDL_IOStream from two threads at once. | |
| 813 * | |
| 814 * \since This function is available since SDL 3.2.0. | |
| 815 */ | |
| 816 extern SDL_DECLSPEC bool SDLCALL SDL_ReadU8(SDL_IOStream *src, Uint8 *value); | |
| 817 | |
| 818 /** | |
| 819 * Use this function to read a signed byte from an SDL_IOStream. | |
| 820 * | |
| 821 * This function will return false when the data stream is completely read, | |
| 822 * and SDL_GetIOStatus() will return SDL_IO_STATUS_EOF. If false is returned | |
| 823 * and the stream is not at EOF, SDL_GetIOStatus() will return a different | |
| 824 * error value and SDL_GetError() will offer a human-readable message. | |
| 825 * | |
| 826 * \param src the SDL_IOStream to read from. | |
| 827 * \param value a pointer filled in with the data read. | |
| 828 * \returns true on success or false on failure; call SDL_GetError() for more | |
| 829 * information. | |
| 830 * | |
| 831 * \threadsafety Do not use the same SDL_IOStream from two threads at once. | |
| 832 * | |
| 833 * \since This function is available since SDL 3.2.0. | |
| 834 */ | |
| 835 extern SDL_DECLSPEC bool SDLCALL SDL_ReadS8(SDL_IOStream *src, Sint8 *value); | |
| 836 | |
| 837 /** | |
| 838 * Use this function to read 16 bits of little-endian data from an | |
| 839 * SDL_IOStream and return in native format. | |
| 840 * | |
| 841 * SDL byteswaps the data only if necessary, so the data returned will be in | |
| 842 * the native byte order. | |
| 843 * | |
| 844 * This function will return false when the data stream is completely read, | |
| 845 * and SDL_GetIOStatus() will return SDL_IO_STATUS_EOF. If false is returned | |
| 846 * and the stream is not at EOF, SDL_GetIOStatus() will return a different | |
| 847 * error value and SDL_GetError() will offer a human-readable message. | |
| 848 * | |
| 849 * \param src the stream from which to read data. | |
| 850 * \param value a pointer filled in with the data read. | |
| 851 * \returns true on successful read or false on failure; call SDL_GetError() | |
| 852 * for more information. | |
| 853 * | |
| 854 * \threadsafety Do not use the same SDL_IOStream from two threads at once. | |
| 855 * | |
| 856 * \since This function is available since SDL 3.2.0. | |
| 857 */ | |
| 858 extern SDL_DECLSPEC bool SDLCALL SDL_ReadU16LE(SDL_IOStream *src, Uint16 *value); | |
| 859 | |
| 860 /** | |
| 861 * Use this function to read 16 bits of little-endian data from an | |
| 862 * SDL_IOStream and return in native format. | |
| 863 * | |
| 864 * SDL byteswaps the data only if necessary, so the data returned will be in | |
| 865 * the native byte order. | |
| 866 * | |
| 867 * This function will return false when the data stream is completely read, | |
| 868 * and SDL_GetIOStatus() will return SDL_IO_STATUS_EOF. If false is returned | |
| 869 * and the stream is not at EOF, SDL_GetIOStatus() will return a different | |
| 870 * error value and SDL_GetError() will offer a human-readable message. | |
| 871 * | |
| 872 * \param src the stream from which to read data. | |
| 873 * \param value a pointer filled in with the data read. | |
| 874 * \returns true on successful read or false on failure; call SDL_GetError() | |
| 875 * for more information. | |
| 876 * | |
| 877 * \threadsafety Do not use the same SDL_IOStream from two threads at once. | |
| 878 * | |
| 879 * \since This function is available since SDL 3.2.0. | |
| 880 */ | |
| 881 extern SDL_DECLSPEC bool SDLCALL SDL_ReadS16LE(SDL_IOStream *src, Sint16 *value); | |
| 882 | |
| 883 /** | |
| 884 * Use this function to read 16 bits of big-endian data from an SDL_IOStream | |
| 885 * and return in native format. | |
| 886 * | |
| 887 * SDL byteswaps the data only if necessary, so the data returned will be in | |
| 888 * the native byte order. | |
| 889 * | |
| 890 * This function will return false when the data stream is completely read, | |
| 891 * and SDL_GetIOStatus() will return SDL_IO_STATUS_EOF. If false is returned | |
| 892 * and the stream is not at EOF, SDL_GetIOStatus() will return a different | |
| 893 * error value and SDL_GetError() will offer a human-readable message. | |
| 894 * | |
| 895 * \param src the stream from which to read data. | |
| 896 * \param value a pointer filled in with the data read. | |
| 897 * \returns true on successful read or false on failure; call SDL_GetError() | |
| 898 * for more information. | |
| 899 * | |
| 900 * \threadsafety Do not use the same SDL_IOStream from two threads at once. | |
| 901 * | |
| 902 * \since This function is available since SDL 3.2.0. | |
| 903 */ | |
| 904 extern SDL_DECLSPEC bool SDLCALL SDL_ReadU16BE(SDL_IOStream *src, Uint16 *value); | |
| 905 | |
| 906 /** | |
| 907 * Use this function to read 16 bits of big-endian data from an SDL_IOStream | |
| 908 * and return in native format. | |
| 909 * | |
| 910 * SDL byteswaps the data only if necessary, so the data returned will be in | |
| 911 * the native byte order. | |
| 912 * | |
| 913 * This function will return false when the data stream is completely read, | |
| 914 * and SDL_GetIOStatus() will return SDL_IO_STATUS_EOF. If false is returned | |
| 915 * and the stream is not at EOF, SDL_GetIOStatus() will return a different | |
| 916 * error value and SDL_GetError() will offer a human-readable message. | |
| 917 * | |
| 918 * \param src the stream from which to read data. | |
| 919 * \param value a pointer filled in with the data read. | |
| 920 * \returns true on successful read or false on failure; call SDL_GetError() | |
| 921 * for more information. | |
| 922 * | |
| 923 * \threadsafety Do not use the same SDL_IOStream from two threads at once. | |
| 924 * | |
| 925 * \since This function is available since SDL 3.2.0. | |
| 926 */ | |
| 927 extern SDL_DECLSPEC bool SDLCALL SDL_ReadS16BE(SDL_IOStream *src, Sint16 *value); | |
| 928 | |
| 929 /** | |
| 930 * Use this function to read 32 bits of little-endian data from an | |
| 931 * SDL_IOStream and return in native format. | |
| 932 * | |
| 933 * SDL byteswaps the data only if necessary, so the data returned will be in | |
| 934 * the native byte order. | |
| 935 * | |
| 936 * This function will return false when the data stream is completely read, | |
| 937 * and SDL_GetIOStatus() will return SDL_IO_STATUS_EOF. If false is returned | |
| 938 * and the stream is not at EOF, SDL_GetIOStatus() will return a different | |
| 939 * error value and SDL_GetError() will offer a human-readable message. | |
| 940 * | |
| 941 * \param src the stream from which to read data. | |
| 942 * \param value a pointer filled in with the data read. | |
| 943 * \returns true on successful read or false on failure; call SDL_GetError() | |
| 944 * for more information. | |
| 945 * | |
| 946 * \threadsafety Do not use the same SDL_IOStream from two threads at once. | |
| 947 * | |
| 948 * \since This function is available since SDL 3.2.0. | |
| 949 */ | |
| 950 extern SDL_DECLSPEC bool SDLCALL SDL_ReadU32LE(SDL_IOStream *src, Uint32 *value); | |
| 951 | |
| 952 /** | |
| 953 * Use this function to read 32 bits of little-endian data from an | |
| 954 * SDL_IOStream and return in native format. | |
| 955 * | |
| 956 * SDL byteswaps the data only if necessary, so the data returned will be in | |
| 957 * the native byte order. | |
| 958 * | |
| 959 * This function will return false when the data stream is completely read, | |
| 960 * and SDL_GetIOStatus() will return SDL_IO_STATUS_EOF. If false is returned | |
| 961 * and the stream is not at EOF, SDL_GetIOStatus() will return a different | |
| 962 * error value and SDL_GetError() will offer a human-readable message. | |
| 963 * | |
| 964 * \param src the stream from which to read data. | |
| 965 * \param value a pointer filled in with the data read. | |
| 966 * \returns true on successful read or false on failure; call SDL_GetError() | |
| 967 * for more information. | |
| 968 * | |
| 969 * \threadsafety Do not use the same SDL_IOStream from two threads at once. | |
| 970 * | |
| 971 * \since This function is available since SDL 3.2.0. | |
| 972 */ | |
| 973 extern SDL_DECLSPEC bool SDLCALL SDL_ReadS32LE(SDL_IOStream *src, Sint32 *value); | |
| 974 | |
| 975 /** | |
| 976 * Use this function to read 32 bits of big-endian data from an SDL_IOStream | |
| 977 * and return in native format. | |
| 978 * | |
| 979 * SDL byteswaps the data only if necessary, so the data returned will be in | |
| 980 * the native byte order. | |
| 981 * | |
| 982 * This function will return false when the data stream is completely read, | |
| 983 * and SDL_GetIOStatus() will return SDL_IO_STATUS_EOF. If false is returned | |
| 984 * and the stream is not at EOF, SDL_GetIOStatus() will return a different | |
| 985 * error value and SDL_GetError() will offer a human-readable message. | |
| 986 * | |
| 987 * \param src the stream from which to read data. | |
| 988 * \param value a pointer filled in with the data read. | |
| 989 * \returns true on successful read or false on failure; call SDL_GetError() | |
| 990 * for more information. | |
| 991 * | |
| 992 * \threadsafety Do not use the same SDL_IOStream from two threads at once. | |
| 993 * | |
| 994 * \since This function is available since SDL 3.2.0. | |
| 995 */ | |
| 996 extern SDL_DECLSPEC bool SDLCALL SDL_ReadU32BE(SDL_IOStream *src, Uint32 *value); | |
| 997 | |
| 998 /** | |
| 999 * Use this function to read 32 bits of big-endian data from an SDL_IOStream | |
| 1000 * and return in native format. | |
| 1001 * | |
| 1002 * SDL byteswaps the data only if necessary, so the data returned will be in | |
| 1003 * the native byte order. | |
| 1004 * | |
| 1005 * This function will return false when the data stream is completely read, | |
| 1006 * and SDL_GetIOStatus() will return SDL_IO_STATUS_EOF. If false is returned | |
| 1007 * and the stream is not at EOF, SDL_GetIOStatus() will return a different | |
| 1008 * error value and SDL_GetError() will offer a human-readable message. | |
| 1009 * | |
| 1010 * \param src the stream from which to read data. | |
| 1011 * \param value a pointer filled in with the data read. | |
| 1012 * \returns true on successful read or false on failure; call SDL_GetError() | |
| 1013 * for more information. | |
| 1014 * | |
| 1015 * \threadsafety Do not use the same SDL_IOStream from two threads at once. | |
| 1016 * | |
| 1017 * \since This function is available since SDL 3.2.0. | |
| 1018 */ | |
| 1019 extern SDL_DECLSPEC bool SDLCALL SDL_ReadS32BE(SDL_IOStream *src, Sint32 *value); | |
| 1020 | |
| 1021 /** | |
| 1022 * Use this function to read 64 bits of little-endian data from an | |
| 1023 * SDL_IOStream and return in native format. | |
| 1024 * | |
| 1025 * SDL byteswaps the data only if necessary, so the data returned will be in | |
| 1026 * the native byte order. | |
| 1027 * | |
| 1028 * This function will return false when the data stream is completely read, | |
| 1029 * and SDL_GetIOStatus() will return SDL_IO_STATUS_EOF. If false is returned | |
| 1030 * and the stream is not at EOF, SDL_GetIOStatus() will return a different | |
| 1031 * error value and SDL_GetError() will offer a human-readable message. | |
| 1032 * | |
| 1033 * \param src the stream from which to read data. | |
| 1034 * \param value a pointer filled in with the data read. | |
| 1035 * \returns true on successful read or false on failure; call SDL_GetError() | |
| 1036 * for more information. | |
| 1037 * | |
| 1038 * \threadsafety Do not use the same SDL_IOStream from two threads at once. | |
| 1039 * | |
| 1040 * \since This function is available since SDL 3.2.0. | |
| 1041 */ | |
| 1042 extern SDL_DECLSPEC bool SDLCALL SDL_ReadU64LE(SDL_IOStream *src, Uint64 *value); | |
| 1043 | |
| 1044 /** | |
| 1045 * Use this function to read 64 bits of little-endian data from an | |
| 1046 * SDL_IOStream and return in native format. | |
| 1047 * | |
| 1048 * SDL byteswaps the data only if necessary, so the data returned will be in | |
| 1049 * the native byte order. | |
| 1050 * | |
| 1051 * This function will return false when the data stream is completely read, | |
| 1052 * and SDL_GetIOStatus() will return SDL_IO_STATUS_EOF. If false is returned | |
| 1053 * and the stream is not at EOF, SDL_GetIOStatus() will return a different | |
| 1054 * error value and SDL_GetError() will offer a human-readable message. | |
| 1055 * | |
| 1056 * \param src the stream from which to read data. | |
| 1057 * \param value a pointer filled in with the data read. | |
| 1058 * \returns true on successful read or false on failure; call SDL_GetError() | |
| 1059 * for more information. | |
| 1060 * | |
| 1061 * \threadsafety Do not use the same SDL_IOStream from two threads at once. | |
| 1062 * | |
| 1063 * \since This function is available since SDL 3.2.0. | |
| 1064 */ | |
| 1065 extern SDL_DECLSPEC bool SDLCALL SDL_ReadS64LE(SDL_IOStream *src, Sint64 *value); | |
| 1066 | |
| 1067 /** | |
| 1068 * Use this function to read 64 bits of big-endian data from an SDL_IOStream | |
| 1069 * and return in native format. | |
| 1070 * | |
| 1071 * SDL byteswaps the data only if necessary, so the data returned will be in | |
| 1072 * the native byte order. | |
| 1073 * | |
| 1074 * This function will return false when the data stream is completely read, | |
| 1075 * and SDL_GetIOStatus() will return SDL_IO_STATUS_EOF. If false is returned | |
| 1076 * and the stream is not at EOF, SDL_GetIOStatus() will return a different | |
| 1077 * error value and SDL_GetError() will offer a human-readable message. | |
| 1078 * | |
| 1079 * \param src the stream from which to read data. | |
| 1080 * \param value a pointer filled in with the data read. | |
| 1081 * \returns true on successful read or false on failure; call SDL_GetError() | |
| 1082 * for more information. | |
| 1083 * | |
| 1084 * \threadsafety Do not use the same SDL_IOStream from two threads at once. | |
| 1085 * | |
| 1086 * \since This function is available since SDL 3.2.0. | |
| 1087 */ | |
| 1088 extern SDL_DECLSPEC bool SDLCALL SDL_ReadU64BE(SDL_IOStream *src, Uint64 *value); | |
| 1089 | |
| 1090 /** | |
| 1091 * Use this function to read 64 bits of big-endian data from an SDL_IOStream | |
| 1092 * and return in native format. | |
| 1093 * | |
| 1094 * SDL byteswaps the data only if necessary, so the data returned will be in | |
| 1095 * the native byte order. | |
| 1096 * | |
| 1097 * This function will return false when the data stream is completely read, | |
| 1098 * and SDL_GetIOStatus() will return SDL_IO_STATUS_EOF. If false is returned | |
| 1099 * and the stream is not at EOF, SDL_GetIOStatus() will return a different | |
| 1100 * error value and SDL_GetError() will offer a human-readable message. | |
| 1101 * | |
| 1102 * \param src the stream from which to read data. | |
| 1103 * \param value a pointer filled in with the data read. | |
| 1104 * \returns true on successful read or false on failure; call SDL_GetError() | |
| 1105 * for more information. | |
| 1106 * | |
| 1107 * \threadsafety Do not use the same SDL_IOStream from two threads at once. | |
| 1108 * | |
| 1109 * \since This function is available since SDL 3.2.0. | |
| 1110 */ | |
| 1111 extern SDL_DECLSPEC bool SDLCALL SDL_ReadS64BE(SDL_IOStream *src, Sint64 *value); | |
| 1112 /* @} *//* Read endian functions */ | |
| 1113 | |
| 1114 /** | |
| 1115 * \name Write endian functions | |
| 1116 * | |
| 1117 * Write an item of native format to the specified endianness. | |
| 1118 */ | |
| 1119 /* @{ */ | |
| 1120 | |
| 1121 /** | |
| 1122 * Use this function to write a byte to an SDL_IOStream. | |
| 1123 * | |
| 1124 * \param dst the SDL_IOStream to write to. | |
| 1125 * \param value the byte value to write. | |
| 1126 * \returns true on successful write or false on failure; call SDL_GetError() | |
| 1127 * for more information. | |
| 1128 * | |
| 1129 * \threadsafety Do not use the same SDL_IOStream from two threads at once. | |
| 1130 * | |
| 1131 * \since This function is available since SDL 3.2.0. | |
| 1132 */ | |
| 1133 extern SDL_DECLSPEC bool SDLCALL SDL_WriteU8(SDL_IOStream *dst, Uint8 value); | |
| 1134 | |
| 1135 /** | |
| 1136 * Use this function to write a signed byte to an SDL_IOStream. | |
| 1137 * | |
| 1138 * \param dst the SDL_IOStream to write to. | |
| 1139 * \param value the byte value to write. | |
| 1140 * \returns true on successful write or false on failure; call SDL_GetError() | |
| 1141 * for more information. | |
| 1142 * | |
| 1143 * \threadsafety Do not use the same SDL_IOStream from two threads at once. | |
| 1144 * | |
| 1145 * \since This function is available since SDL 3.2.0. | |
| 1146 */ | |
| 1147 extern SDL_DECLSPEC bool SDLCALL SDL_WriteS8(SDL_IOStream *dst, Sint8 value); | |
| 1148 | |
| 1149 /** | |
| 1150 * Use this function to write 16 bits in native format to an SDL_IOStream as | |
| 1151 * little-endian data. | |
| 1152 * | |
| 1153 * SDL byteswaps the data only if necessary, so the application always | |
| 1154 * specifies native format, and the data written will be in little-endian | |
| 1155 * format. | |
| 1156 * | |
| 1157 * \param dst the stream to which data will be written. | |
| 1158 * \param value the data to be written, in native format. | |
| 1159 * \returns true on successful write or false on failure; call SDL_GetError() | |
| 1160 * for more information. | |
| 1161 * | |
| 1162 * \threadsafety Do not use the same SDL_IOStream from two threads at once. | |
| 1163 * | |
| 1164 * \since This function is available since SDL 3.2.0. | |
| 1165 */ | |
| 1166 extern SDL_DECLSPEC bool SDLCALL SDL_WriteU16LE(SDL_IOStream *dst, Uint16 value); | |
| 1167 | |
| 1168 /** | |
| 1169 * Use this function to write 16 bits in native format to an SDL_IOStream as | |
| 1170 * little-endian data. | |
| 1171 * | |
| 1172 * SDL byteswaps the data only if necessary, so the application always | |
| 1173 * specifies native format, and the data written will be in little-endian | |
| 1174 * format. | |
| 1175 * | |
| 1176 * \param dst the stream to which data will be written. | |
| 1177 * \param value the data to be written, in native format. | |
| 1178 * \returns true on successful write or false on failure; call SDL_GetError() | |
| 1179 * for more information. | |
| 1180 * | |
| 1181 * \threadsafety Do not use the same SDL_IOStream from two threads at once. | |
| 1182 * | |
| 1183 * \since This function is available since SDL 3.2.0. | |
| 1184 */ | |
| 1185 extern SDL_DECLSPEC bool SDLCALL SDL_WriteS16LE(SDL_IOStream *dst, Sint16 value); | |
| 1186 | |
| 1187 /** | |
| 1188 * Use this function to write 16 bits in native format to an SDL_IOStream as | |
| 1189 * big-endian data. | |
| 1190 * | |
| 1191 * SDL byteswaps the data only if necessary, so the application always | |
| 1192 * specifies native format, and the data written will be in big-endian format. | |
| 1193 * | |
| 1194 * \param dst the stream to which data will be written. | |
| 1195 * \param value the data to be written, in native format. | |
| 1196 * \returns true on successful write or false on failure; call SDL_GetError() | |
| 1197 * for more information. | |
| 1198 * | |
| 1199 * \threadsafety Do not use the same SDL_IOStream from two threads at once. | |
| 1200 * | |
| 1201 * \since This function is available since SDL 3.2.0. | |
| 1202 */ | |
| 1203 extern SDL_DECLSPEC bool SDLCALL SDL_WriteU16BE(SDL_IOStream *dst, Uint16 value); | |
| 1204 | |
| 1205 /** | |
| 1206 * Use this function to write 16 bits in native format to an SDL_IOStream as | |
| 1207 * big-endian data. | |
| 1208 * | |
| 1209 * SDL byteswaps the data only if necessary, so the application always | |
| 1210 * specifies native format, and the data written will be in big-endian format. | |
| 1211 * | |
| 1212 * \param dst the stream to which data will be written. | |
| 1213 * \param value the data to be written, in native format. | |
| 1214 * \returns true on successful write or false on failure; call SDL_GetError() | |
| 1215 * for more information. | |
| 1216 * | |
| 1217 * \threadsafety Do not use the same SDL_IOStream from two threads at once. | |
| 1218 * | |
| 1219 * \since This function is available since SDL 3.2.0. | |
| 1220 */ | |
| 1221 extern SDL_DECLSPEC bool SDLCALL SDL_WriteS16BE(SDL_IOStream *dst, Sint16 value); | |
| 1222 | |
| 1223 /** | |
| 1224 * Use this function to write 32 bits in native format to an SDL_IOStream as | |
| 1225 * little-endian data. | |
| 1226 * | |
| 1227 * SDL byteswaps the data only if necessary, so the application always | |
| 1228 * specifies native format, and the data written will be in little-endian | |
| 1229 * format. | |
| 1230 * | |
| 1231 * \param dst the stream to which data will be written. | |
| 1232 * \param value the data to be written, in native format. | |
| 1233 * \returns true on successful write or false on failure; call SDL_GetError() | |
| 1234 * for more information. | |
| 1235 * | |
| 1236 * \threadsafety Do not use the same SDL_IOStream from two threads at once. | |
| 1237 * | |
| 1238 * \since This function is available since SDL 3.2.0. | |
| 1239 */ | |
| 1240 extern SDL_DECLSPEC bool SDLCALL SDL_WriteU32LE(SDL_IOStream *dst, Uint32 value); | |
| 1241 | |
| 1242 /** | |
| 1243 * Use this function to write 32 bits in native format to an SDL_IOStream as | |
| 1244 * little-endian data. | |
| 1245 * | |
| 1246 * SDL byteswaps the data only if necessary, so the application always | |
| 1247 * specifies native format, and the data written will be in little-endian | |
| 1248 * format. | |
| 1249 * | |
| 1250 * \param dst the stream to which data will be written. | |
| 1251 * \param value the data to be written, in native format. | |
| 1252 * \returns true on successful write or false on failure; call SDL_GetError() | |
| 1253 * for more information. | |
| 1254 * | |
| 1255 * \threadsafety Do not use the same SDL_IOStream from two threads at once. | |
| 1256 * | |
| 1257 * \since This function is available since SDL 3.2.0. | |
| 1258 */ | |
| 1259 extern SDL_DECLSPEC bool SDLCALL SDL_WriteS32LE(SDL_IOStream *dst, Sint32 value); | |
| 1260 | |
| 1261 /** | |
| 1262 * Use this function to write 32 bits in native format to an SDL_IOStream as | |
| 1263 * big-endian data. | |
| 1264 * | |
| 1265 * SDL byteswaps the data only if necessary, so the application always | |
| 1266 * specifies native format, and the data written will be in big-endian format. | |
| 1267 * | |
| 1268 * \param dst the stream to which data will be written. | |
| 1269 * \param value the data to be written, in native format. | |
| 1270 * \returns true on successful write or false on failure; call SDL_GetError() | |
| 1271 * for more information. | |
| 1272 * | |
| 1273 * \threadsafety Do not use the same SDL_IOStream from two threads at once. | |
| 1274 * | |
| 1275 * \since This function is available since SDL 3.2.0. | |
| 1276 */ | |
| 1277 extern SDL_DECLSPEC bool SDLCALL SDL_WriteU32BE(SDL_IOStream *dst, Uint32 value); | |
| 1278 | |
| 1279 /** | |
| 1280 * Use this function to write 32 bits in native format to an SDL_IOStream as | |
| 1281 * big-endian data. | |
| 1282 * | |
| 1283 * SDL byteswaps the data only if necessary, so the application always | |
| 1284 * specifies native format, and the data written will be in big-endian format. | |
| 1285 * | |
| 1286 * \param dst the stream to which data will be written. | |
| 1287 * \param value the data to be written, in native format. | |
| 1288 * \returns true on successful write or false on failure; call SDL_GetError() | |
| 1289 * for more information. | |
| 1290 * | |
| 1291 * \threadsafety Do not use the same SDL_IOStream from two threads at once. | |
| 1292 * | |
| 1293 * \since This function is available since SDL 3.2.0. | |
| 1294 */ | |
| 1295 extern SDL_DECLSPEC bool SDLCALL SDL_WriteS32BE(SDL_IOStream *dst, Sint32 value); | |
| 1296 | |
| 1297 /** | |
| 1298 * Use this function to write 64 bits in native format to an SDL_IOStream as | |
| 1299 * little-endian data. | |
| 1300 * | |
| 1301 * SDL byteswaps the data only if necessary, so the application always | |
| 1302 * specifies native format, and the data written will be in little-endian | |
| 1303 * format. | |
| 1304 * | |
| 1305 * \param dst the stream to which data will be written. | |
| 1306 * \param value the data to be written, in native format. | |
| 1307 * \returns true on successful write or false on failure; call SDL_GetError() | |
| 1308 * for more information. | |
| 1309 * | |
| 1310 * \threadsafety Do not use the same SDL_IOStream from two threads at once. | |
| 1311 * | |
| 1312 * \since This function is available since SDL 3.2.0. | |
| 1313 */ | |
| 1314 extern SDL_DECLSPEC bool SDLCALL SDL_WriteU64LE(SDL_IOStream *dst, Uint64 value); | |
| 1315 | |
| 1316 /** | |
| 1317 * Use this function to write 64 bits in native format to an SDL_IOStream as | |
| 1318 * little-endian data. | |
| 1319 * | |
| 1320 * SDL byteswaps the data only if necessary, so the application always | |
| 1321 * specifies native format, and the data written will be in little-endian | |
| 1322 * format. | |
| 1323 * | |
| 1324 * \param dst the stream to which data will be written. | |
| 1325 * \param value the data to be written, in native format. | |
| 1326 * \returns true on successful write or false on failure; call SDL_GetError() | |
| 1327 * for more information. | |
| 1328 * | |
| 1329 * \threadsafety Do not use the same SDL_IOStream from two threads at once. | |
| 1330 * | |
| 1331 * \since This function is available since SDL 3.2.0. | |
| 1332 */ | |
| 1333 extern SDL_DECLSPEC bool SDLCALL SDL_WriteS64LE(SDL_IOStream *dst, Sint64 value); | |
| 1334 | |
| 1335 /** | |
| 1336 * Use this function to write 64 bits in native format to an SDL_IOStream as | |
| 1337 * big-endian data. | |
| 1338 * | |
| 1339 * SDL byteswaps the data only if necessary, so the application always | |
| 1340 * specifies native format, and the data written will be in big-endian format. | |
| 1341 * | |
| 1342 * \param dst the stream to which data will be written. | |
| 1343 * \param value the data to be written, in native format. | |
| 1344 * \returns true on successful write or false on failure; call SDL_GetError() | |
| 1345 * for more information. | |
| 1346 * | |
| 1347 * \threadsafety Do not use the same SDL_IOStream from two threads at once. | |
| 1348 * | |
| 1349 * \since This function is available since SDL 3.2.0. | |
| 1350 */ | |
| 1351 extern SDL_DECLSPEC bool SDLCALL SDL_WriteU64BE(SDL_IOStream *dst, Uint64 value); | |
| 1352 | |
| 1353 /** | |
| 1354 * Use this function to write 64 bits in native format to an SDL_IOStream as | |
| 1355 * big-endian data. | |
| 1356 * | |
| 1357 * SDL byteswaps the data only if necessary, so the application always | |
| 1358 * specifies native format, and the data written will be in big-endian format. | |
| 1359 * | |
| 1360 * \param dst the stream to which data will be written. | |
| 1361 * \param value the data to be written, in native format. | |
| 1362 * \returns true on successful write or false on failure; call SDL_GetError() | |
| 1363 * for more information. | |
| 1364 * | |
| 1365 * \threadsafety Do not use the same SDL_IOStream from two threads at once. | |
| 1366 * | |
| 1367 * \since This function is available since SDL 3.2.0. | |
| 1368 */ | |
| 1369 extern SDL_DECLSPEC bool SDLCALL SDL_WriteS64BE(SDL_IOStream *dst, Sint64 value); | |
| 1370 | |
| 1371 /* @} *//* Write endian functions */ | |
| 1372 | |
| 1373 /* Ends C function definitions when using C++ */ | |
| 1374 #ifdef __cplusplus | |
| 1375 } | |
| 1376 #endif | |
| 1377 #include <SDL3/SDL_close_code.h> | |
| 1378 | |
| 1379 #endif /* SDL_iostream_h_ */ |
