// vim:fileencoding=utf-8:foldmethod=marker #ifndef FILE_H #define FILE_H #include "../../common/aliases/aliases.h" #include "../../primitives/array/array.h" #include "../../primitives/strings/str8/str8.h" #include #ifdef WAPP_PLATFORM_CPP BEGIN_C_LINKAGE #endif // !WAPP_PLATFORM_CPP #ifdef WAPP_PLATFORM_CPP #define wapp_file_item_to_array(ITEM) (GenericArray{&(ITEM), 1, 1, sizeof(ITEM)}) #define wapp_file_array_to_item(TYPE, ARRAY) (sizeof(TYPE) == (ARRAY).item_size && (ARRAY).count == 1 ? \ *((TYPE *)((ARRAY).items)) : \ TYPE{}) #else #define wapp_file_item_to_array(ITEM) ((GenericArray){.items = &(ITEM), \ .count = 1, \ .capacity = 1, \ .item_size = sizeof(ITEM)}) #define wapp_file_array_to_item(TYPE, ARRAY) (sizeof(TYPE) == (ARRAY).item_size && (ARRAY).count == 1 ? \ *((TYPE *)((ARRAY).items)) : \ (TYPE){0}) #endif // !WAPP_PLATFORM_CPP typedef FILE File; typedef enum { WAPP_FA_MODE_R, // Equivalent to r WAPP_FA_MODE_W, // Equivalent to w WAPP_FA_MODE_A, // Equivalent to a WAPP_FA_MODE_R_EX, // Equivalent to r+ WAPP_FA_MODE_W_EX, // Equivalent to w+ WAPP_FA_MODE_A_EX, // Equivalent to a+ WAPP_FA_MODE_RB, // Equivalent to rb WAPP_FA_MODE_WB, // Equivalent to wb WAPP_FA_MODE_AB, // Equivalent to ab WAPP_FA_MODE_RB_EX, // Equivalent to rb+ WAPP_FA_MODE_WB_EX, // Equivalent to wb+ WAPP_FA_MODE_AB_EX, // Equivalent to ab+ WAPP_FA_MODE_WX, // Equivalent to wx WAPP_FA_MODE_WX_EX, // Equivalent to wx+ WAPP_FA_MODE_WBX, // Equivalent to wbx WAPP_FA_MODE_WBX_EX, // Equivalent to wbx+ FILE_ACCESS_MODE_COUNT, } FileAccessMode; typedef enum { WAPP_SEEK_START = SEEK_SET, WAPP_SEEK_CURRENT = SEEK_CUR, WAPP_SEEK_END = SEEK_END, } FileSeekOrigin; File *wapp_file_open(Str8RO *filename, FileAccessMode mode); u64 wapp_file_get_current_position(File *file); i32 wapp_file_seek(File *file, u64 offset, FileSeekOrigin origin); u64 wapp_file_get_length(File *file); u64 wapp_file_read(GenericArray *dst, File *file, u64 item_count); u64 wapp_file_write(const GenericArray *src, File *file, u64 item_count); i32 wapp_file_flush(File *file); i32 wapp_file_close(File *file); #ifdef WAPP_PLATFORM_CPP END_C_LINKAGE #endif // !WAPP_PLATFORM_CPP #endif // !FILE_H