The function pointers that drive an SDL_IOStream.
Defined in <SDL3/SDL_iostream.h>
typedef struct SDL_IOStreamInterface
{/* The version of this interface */
Uint32 version;
/**
* Return the number of bytes in this SDL_IOStream
*
* \return the total size of the data stream, or -1 on error.
*/
void *userdata);
Sint64 (SDLCALL *size)(
/**
* Seek to `offset` relative to `whence`, one of stdio's whence values:
* SDL_IO_SEEK_SET, SDL_IO_SEEK_CUR, SDL_IO_SEEK_END
*
* \return the final offset in the data stream, or -1 on error.
*/
void *userdata, Sint64 offset, SDL_IOWhence whence);
Sint64 (SDLCALL *seek)(
/**
* Read up to `size` bytes from the data stream to the area pointed
* at by `ptr`.
*
* On an incomplete read, you should set `*status` to a value from the
* SDL_IOStatus enum. You do not have to explicitly set this on
* a complete, successful read.
*
* \return the number of bytes read
*/
size_t (SDLCALL *read)(void *userdata, void *ptr, size_t size, SDL_IOStatus *status);
/**
* Write exactly `size` bytes from the area pointed at by `ptr`
* to data stream.
*
* On an incomplete write, you should set `*status` to a value from the
* SDL_IOStatus enum. You do not have to explicitly set this on
* a complete, successful write.
*
* \return the number of bytes written
*/
size_t (SDLCALL *write)(void *userdata, const void *ptr, size_t size, SDL_IOStatus *status);
/**
* If the stream is buffering, make sure the data is written out.
*
* On failure, you should set `*status` to a value from the
* SDL_IOStatus enum. You do not have to explicitly set this on
* a successful flush.
*
* \return true if successful or false on write error when flushing data.
*/
bool (SDLCALL *flush)(void *userdata, SDL_IOStatus *status);
/**
* Close and free any allocated resources.
*
* This does not guarantee file writes will sync to physical media; they
* can be in the system's file cache, waiting to go to disk.
*
* The SDL_IOStream is still destroyed even if this fails, so clean up anything
* even if flushing buffers, etc, returns an error.
*
* \return true if successful or false on write error when flushing data.
*/
bool (SDLCALL *close)(void *userdata);
} SDL_IOStreamInterface;
Applications can provide this struct to SDL_OpenIO() to create their own implementation of SDL_IOStream. This is not necessarily required, as SDL already offers several common types of I/O streams, via functions like SDL_IOFromFile() and SDL_IOFromMem().
This structure should be initialized using SDL_INIT_INTERFACE()
This struct is available since SDL 3.1.3.