2020-08-27 00:21:44 +08:00
|
|
|
// Copyright (c) 2018-2019 HALX99
|
2022-04-25 19:15:46 +08:00
|
|
|
// Copyright (c) 2020 C4games Ltd
|
2019-11-24 14:54:45 +08:00
|
|
|
#pragma once
|
|
|
|
|
|
|
|
#include <string>
|
|
|
|
|
2023-09-02 19:56:33 +08:00
|
|
|
#include "platform/PlatformConfig.h"
|
2023-06-11 13:08:08 +08:00
|
|
|
#include "platform/PlatformMacros.h"
|
2019-11-24 14:54:45 +08:00
|
|
|
|
2022-07-11 17:50:21 +08:00
|
|
|
NS_AX_BEGIN
|
2019-11-24 14:54:45 +08:00
|
|
|
|
2023-09-02 19:56:33 +08:00
|
|
|
class AX_DLL FileStream
|
2021-12-25 10:04:45 +08:00
|
|
|
{
|
2019-11-24 14:54:45 +08:00
|
|
|
public:
|
2023-09-02 19:56:33 +08:00
|
|
|
virtual ~FileStream() = default;
|
2020-08-27 11:35:55 +08:00
|
|
|
|
2023-09-02 19:56:33 +08:00
|
|
|
enum class Mode
|
2021-12-25 10:04:45 +08:00
|
|
|
{
|
2023-09-02 19:56:33 +08:00
|
|
|
READ,
|
|
|
|
WRITE,
|
|
|
|
APPEND,
|
|
|
|
OVERLAPPED,
|
|
|
|
};
|
2019-11-24 14:54:45 +08:00
|
|
|
|
2023-09-02 19:56:33 +08:00
|
|
|
/**
|
|
|
|
* Open a file
|
|
|
|
* @param path file to open
|
|
|
|
* @param mode File open mode, being READ | WRITE | APPEND
|
|
|
|
* @return true if successful, false if not
|
|
|
|
*/
|
|
|
|
virtual bool open(std::string_view path, FileStream::Mode mode) = 0;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Close a file stream
|
|
|
|
* @return 0 if successful, -1 if not
|
|
|
|
*/
|
|
|
|
virtual int close() = 0;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Seek to position in a file stream
|
|
|
|
* @param offset how many bytes to move within the stream
|
|
|
|
* @param origin SEEK_SET | SEEK_CUR | SEEK_END
|
|
|
|
* @return 0 if successful, -1 if not
|
|
|
|
*/
|
|
|
|
virtual int seek(int64_t offset, int origin) = 0;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Read data from file stream
|
|
|
|
* @param buf pointer to data
|
|
|
|
* @param size the amount of data to read in bytes
|
|
|
|
* @return amount of data read successfully, -1 if error
|
|
|
|
*/
|
|
|
|
virtual int read(void* buf, unsigned int size) = 0;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Write data to file stream
|
|
|
|
* @param buf pointer to data
|
|
|
|
* @param size the amount of data to write in bytes
|
|
|
|
* @return amount of data written successfully, -1 if error
|
|
|
|
*/
|
|
|
|
virtual int write(const void* buf, unsigned int size) = 0;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Get the current position in the file stream
|
|
|
|
* @return current position, -1 if error
|
|
|
|
*/
|
|
|
|
virtual int64_t tell() = 0;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Get the size of the file stream
|
|
|
|
* @return stream size, -1 if error (Mode::WRITE and Mode::APPEND may return -1)
|
|
|
|
*/
|
|
|
|
virtual int64_t size() = 0;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Get status of file stream
|
|
|
|
* @return true if open, false if closed
|
|
|
|
*/
|
|
|
|
virtual bool isOpen() const = 0;
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Get native handle if support
|
|
|
|
* @returns nullptr if not a local disk file
|
|
|
|
* Windows: HANDLE
|
|
|
|
* Other: file descriptor
|
|
|
|
*/
|
|
|
|
virtual void* getNativeHandle() const { return nullptr; }
|
|
|
|
|
|
|
|
virtual operator bool() const { return isOpen(); }
|
|
|
|
|
|
|
|
protected:
|
|
|
|
FileStream(){};
|
2021-04-22 19:49:43 +08:00
|
|
|
};
|
|
|
|
|
2023-03-26 22:42:13 +08:00
|
|
|
NS_AX_END
|