axmol/core/platform/FileStream.h

96 lines
2.3 KiB
C
Raw Normal View History

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
#pragma once
#include <string>
2023-09-02 19:56:33 +08:00
#include "platform/PlatformConfig.h"
#include "platform/PlatformMacros.h"
NS_AX_BEGIN
2023-09-02 19:56:33 +08:00
class AX_DLL FileStream
2021-12-25 10:04:45 +08:00
{
public:
2023-09-02 19:56:33 +08:00
virtual ~FileStream() = default;
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,
};
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(){};
};
2023-03-26 22:42:13 +08:00
NS_AX_END