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

View File

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