123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400 |
- #pragma once
- #include "Baselib_ErrorState.h"
- #include "Baselib_Memory.h"
- #include "Internal/Baselib_EnumSizeCheck.h"
- #ifdef __cplusplus
- BASELIB_C_INTERFACE
- {
- #endif
- typedef struct Baselib_FileIO_EventQueue {void* handle;} Baselib_FileIO_EventQueue;
- typedef struct Baselib_FileIO_AsyncFile {void* handle;} Baselib_FileIO_AsyncFile;
- typedef struct Baselib_FileIO_SyncFile {void* handle;} Baselib_FileIO_SyncFile;
- static const Baselib_FileIO_EventQueue Baselib_FileIO_EventQueue_Invalid = { NULL };
- static const Baselib_FileIO_AsyncFile Baselib_FileIO_AsyncFile_Invalid = { NULL };
- static const Baselib_FileIO_SyncFile Baselib_FileIO_SyncFile_Invalid = { (void*)-1 };
- typedef enum Baselib_FileIO_OpenFlags_t
- {
-
- Baselib_FileIO_OpenFlags_Read = 0x01,
-
- Baselib_FileIO_OpenFlags_Write = 0x02,
-
-
- Baselib_FileIO_OpenFlags_OpenAlways = 0x04,
-
-
- Baselib_FileIO_OpenFlags_CreateAlways = 0x08,
- } Baselib_FileIO_OpenFlags_t;
- typedef uint32_t Baselib_FileIO_OpenFlags;
- typedef struct Baselib_FileIO_ReadRequest
- {
-
-
-
- uint64_t offset;
-
- void* buffer;
-
-
- uint64_t size;
- } Baselib_FileIO_ReadRequest;
- typedef enum Baselib_FileIO_Priority
- {
- Baselib_FileIO_Priority_Normal = 0,
- Baselib_FileIO_Priority_High = 1
- } Baselib_FileIO_Priority;
- BASELIB_ENUM_ENSURE_ABI_COMPATIBILITY(Baselib_FileIO_Priority);
- typedef enum Baselib_FileIO_EventQueue_ResultType
- {
-
- Baselib_FileIO_EventQueue_Callback = 1,
-
- Baselib_FileIO_EventQueue_OpenFile = 2,
-
- Baselib_FileIO_EventQueue_ReadFile = 3,
-
- Baselib_FileIO_EventQueue_CloseFile = 4
- } Baselib_FileIO_EventQueue_ResultType;
- BASELIB_ENUM_ENSURE_ABI_COMPATIBILITY(Baselib_FileIO_EventQueue_ResultType);
- typedef void (*EventQueueCallback)(uint64_t userdata);
- typedef struct Baselib_FileIO_EventQueue_Result_Callback
- {
-
- EventQueueCallback callback;
- } Baselib_FileIO_EventQueue_Result_Callback;
- typedef struct Baselib_FileIO_EventQueue_Result_OpenFile
- {
-
- uint64_t fileSize;
- } Baselib_FileIO_EventQueue_Result_OpenFile;
- typedef struct Baselib_FileIO_EventQueue_Result_ReadFile
- {
-
- uint64_t bytesTransferred;
- } Baselib_FileIO_EventQueue_Result_ReadFile;
- typedef struct Baselib_FileIO_EventQueue_Result
- {
-
- Baselib_FileIO_EventQueue_ResultType type;
-
- uint64_t userdata;
-
- Baselib_ErrorState errorState;
- union
- {
- Baselib_FileIO_EventQueue_Result_Callback callback;
- Baselib_FileIO_EventQueue_Result_OpenFile openFile;
- Baselib_FileIO_EventQueue_Result_ReadFile readFile;
- };
- } Baselib_FileIO_EventQueue_Result;
- BASELIB_API Baselib_FileIO_EventQueue Baselib_FileIO_EventQueue_Create(void);
- BASELIB_API void Baselib_FileIO_EventQueue_Free(
- Baselib_FileIO_EventQueue eq
- );
- BASELIB_API uint64_t Baselib_FileIO_EventQueue_Dequeue(
- Baselib_FileIO_EventQueue eq,
- Baselib_FileIO_EventQueue_Result results[],
- uint64_t count,
- uint32_t timeoutInMilliseconds
- );
- BASELIB_API void Baselib_FileIO_EventQueue_Shutdown(
- Baselib_FileIO_EventQueue eq,
- uint32_t threadCount
- );
- BASELIB_API Baselib_FileIO_AsyncFile Baselib_FileIO_AsyncOpen(
- Baselib_FileIO_EventQueue eq,
- const char* pathname,
- uint64_t userdata,
- Baselib_FileIO_Priority priority
- );
- BASELIB_API void Baselib_FileIO_AsyncRead(
- Baselib_FileIO_AsyncFile file,
- Baselib_FileIO_ReadRequest requests[],
- uint64_t count,
- uint64_t userdata,
- Baselib_FileIO_Priority priority
- );
- BASELIB_API void Baselib_FileIO_AsyncClose(
- Baselib_FileIO_AsyncFile file
- );
- BASELIB_API Baselib_FileIO_SyncFile Baselib_FileIO_SyncOpen(
- const char* pathname,
- Baselib_FileIO_OpenFlags openFlags,
- Baselib_ErrorState* errorState
- );
- BASELIB_API Baselib_FileIO_SyncFile Baselib_FileIO_SyncFileFromNativeHandle(
- uint64_t handle,
- uint32_t type
- );
- BASELIB_API uint64_t Baselib_FileIO_SyncRead(
- Baselib_FileIO_SyncFile file,
- uint64_t offset,
- void* buffer,
- uint64_t size,
- Baselib_ErrorState* errorState
- );
- BASELIB_API uint64_t Baselib_FileIO_SyncWrite(
- Baselib_FileIO_SyncFile file,
- uint64_t offset,
- const void* buffer,
- uint64_t size,
- Baselib_ErrorState* errorState
- );
- BASELIB_API void Baselib_FileIO_SyncFlush(
- Baselib_FileIO_SyncFile file,
- Baselib_ErrorState* errorState
- );
- BASELIB_API void Baselib_FileIO_SyncSetFileSize(
- Baselib_FileIO_SyncFile file,
- uint64_t size,
- Baselib_ErrorState* errorState
- );
- BASELIB_API uint64_t Baselib_FileIO_SyncGetFileSize(
- Baselib_FileIO_SyncFile file,
- Baselib_ErrorState* errorState
- );
- BASELIB_API void Baselib_FileIO_SyncClose(
- Baselib_FileIO_SyncFile file,
- Baselib_ErrorState* errorState
- );
- #include <C/Baselib_FileIO.inl.h>
- #ifdef __cplusplus
- }
- #endif
|