This commit is contained in:
Бранимир Караџић
2019-02-16 22:40:55 -08:00
parent c27af49788
commit 1b29d67158
2 changed files with 64 additions and 40 deletions

View File

@@ -11,19 +11,19 @@
namespace bx
{
///
/// Returns standard input reader.
ReaderI* getStdIn();
///
/// Returns standard output writer.
WriterI* getStdOut();
///
/// Returns standard error writer.
WriterI* getStdErr();
///
/// Returns null output writer.
WriterI* getNullOut();
///
/// File reader.
class FileReader : public FileReaderI
{
public:
@@ -49,7 +49,7 @@ namespace bx
BX_ALIGN_DECL(16, uint8_t) m_internal[64];
};
///
/// File writer.
class FileWriter : public FileWriterI
{
public:
@@ -75,26 +75,28 @@ namespace bx
BX_ALIGN_DECL(16, uint8_t) m_internal[64];
};
/// File type.
struct FileType
{
/// File types:
enum Enum
{
File,
Dir,
File, //!< File.
Dir, //!< Directory.
Count
};
};
///
/// File info.
struct FileInfo
{
FilePath filePath;
uint64_t size;
FileType::Enum type;
FilePath filePath; //!< File path.
uint64_t size; //!< File size.
FileType::Enum type; //!< File type.
};
///
/// Directory reader.
class DirectoryReader : public ReaderOpenI, public CloserI, public ReaderI
{
public:
@@ -117,7 +119,7 @@ namespace bx
BX_ALIGN_DECL(16, uint8_t) m_internal[sizeof(FilePath)+sizeof(FileInfo)+16];
};
///
/// FIle stat.
bool stat(FileInfo& _outFileInfo, const FilePath& _filePath);
} // namespace bx

View File

@@ -22,94 +22,116 @@ BX_ERROR_RESULT(BX_ERROR_READERWRITER_ALREADY_OPEN, BX_MAKEFOURCC('R', 'W', 0, 5
namespace bx
{
///
/// The position from where offset is added.
struct Whence
{
/// Whence values:
enum Enum
{
Begin,
Current,
End,
Begin, //!< From begining of file.
Current, //!< From current position of file.
End, //!< From end of file.
};
};
///
/// Reader interface.
struct BX_NO_VTABLE ReaderI
{
///
virtual ~ReaderI() = 0;
///
virtual int32_t read(void* _data, int32_t _size, Error* _err) = 0;
};
///
/// Writer interface.
struct BX_NO_VTABLE WriterI
{
///
virtual ~WriterI() = 0;
///
virtual int32_t write(const void* _data, int32_t _size, Error* _err) = 0;
};
///
/// Seeker interface.
struct BX_NO_VTABLE SeekerI
{
///
virtual ~SeekerI() = 0;
///
virtual int64_t seek(int64_t _offset = 0, Whence::Enum _whence = Whence::Current) = 0;
};
///
/// Reader seeker interface.
struct BX_NO_VTABLE ReaderSeekerI : public ReaderI, public SeekerI
{
};
///
/// Writer seeker interface.
struct BX_NO_VTABLE WriterSeekerI : public WriterI, public SeekerI
{
};
///
/// Open for reading interface.
struct BX_NO_VTABLE ReaderOpenI
{
///
virtual ~ReaderOpenI() = 0;
///
virtual bool open(const FilePath& _filePath, Error* _err) = 0;
};
///
/// Open for writing interface.
struct BX_NO_VTABLE WriterOpenI
{
///
virtual ~WriterOpenI() = 0;
///
virtual bool open(const FilePath& _filePath, bool _append, Error* _err) = 0;
};
///
/// Open process interface.
struct BX_NO_VTABLE ProcessOpenI
{
///
virtual ~ProcessOpenI() = 0;
///
virtual bool open(const FilePath& _filePath, const StringView& _args, Error* _err) = 0;
};
///
/// Closer interface.
struct BX_NO_VTABLE CloserI
{
///
virtual ~CloserI() = 0;
///
virtual void close() = 0;
};
///
/// File reader interface.
struct BX_NO_VTABLE FileReaderI : public ReaderOpenI, public CloserI, public ReaderSeekerI
{
};
///
/// File writer interface.
struct BX_NO_VTABLE FileWriterI : public WriterOpenI, public CloserI, public WriterSeekerI
{
};
///
/// Memory block interface.
struct BX_NO_VTABLE MemoryBlockI
{
virtual void* more(uint32_t _size = 0) = 0;
virtual uint32_t getSize() = 0;
};
///
/// Static memory block interface.
class StaticMemoryBlock : public MemoryBlockI
{
public:
@@ -126,11 +148,11 @@ namespace bx
virtual uint32_t getSize() override;
private:
void* m_data;
void* m_data;
uint32_t m_size;
};
///
/// Memory block.
class MemoryBlock : public MemoryBlockI
{
public:
@@ -148,8 +170,8 @@ namespace bx
private:
AllocatorI* m_allocator;
void* m_data;
uint32_t m_size;
void* m_data;
uint32_t m_size;
};
/// Sizer writer. Dummy writter that only counts number of bytes written into it.
@@ -173,7 +195,7 @@ namespace bx
int64_t m_top;
};
///
/// Memory reader.
class MemoryReader : public ReaderSeekerI
{
public:
@@ -204,7 +226,7 @@ namespace bx
int64_t m_top;
};
///
/// Memory writer.
class MemoryWriter : public WriterSeekerI
{
public:
@@ -223,9 +245,9 @@ namespace bx
private:
MemoryBlockI* m_memBlock;
uint8_t* m_data;
int64_t m_pos;
int64_t m_top;
int64_t m_size;
int64_t m_pos;
int64_t m_top;
int64_t m_size;
};
/// Static (fixed size) memory block writer.